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中:
文件权限规定了该文件中数据的使用方式。如果您尝试向文件写入内容,则文件权限将会决定是否允许这样做。
这似乎意味着它不应该能够写入它,因为文件系统说你不能这样做。