我的设置:perl 5.20.2
使用以下代码按预期更改文件:
echo abc > test.txt
perl -i -ne 's/b/x/;print' test.txt
但是在这里,输出打印到stdout
并且文件被清空。为什么呢?
echo abc > test.txt
perl -i -ne 's/b/x/;push@a,$_;END{print for @a}' test.txt
答案 0 :(得分:7)
END
块不是-i -n
魔法的一部分。
-n
在您的代码周围(大部分)包含隐式while (<>)
,而-i
会导致<>
处理的文件被覆盖。
但是,正如所指出的in the docs,BEGIN
和END
阻止 之外的隐式循环,并且不受{{1}的影响}。没有任何因素导致-i
print
到任何地方。