Perl の-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 FAQにあります。
ファイルのアクセス許可は、そのファイル内のデータに何が起こるかを示します。… ファイルに書き込もうとすると、ファイルのアクセス許可によって許可されるかどうかが決まります。
ファイルシステムが書き込みできないと言っているので、最終的には書き込みができないはずだと言っているようです。