Переключатель Perls -i
появляется, чтобы изменить файлы только для чтения:
$ echo 'foobar' > tmp.txt
$ chmod -w tmp.txt
$ perl -pi -w -e 's/foobar/FOOBAR/' tmp.txt
$ cat tmp.txt
FOOBAR
Это неожиданно, так как команда не должна была изменять файл на свои разрешения. Ожидается, что попытка обновления с помощью других средств завершится неудачно:
$ echo 'barbaz' > tmp.txt
-bash: tmp.txt: Permission denied
Почему Perl модифицирует файлы только для чтения (и как?) и, что самое главное, как я могу заставить Perl не делать этого?
Единственный информативный ресурс, который я могу найти в этом разделе, находится в часто задаваемых вопросах Perl:
Разрешения на файл говорят, что может случиться с данными в этом файле.... Если вы попытаетесь записать в файл, разрешения файла определяют, разрешено ли вам.
В конечном итоге кажется, что он говорит, что он не должен писать на него, поскольку файловая система говорит, что вы не можете.