为什么'perl -i'没有就地更改文件?

时间:2015-09-08 21:05:30

标签: perl

我的设置: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

1 个答案:

答案 0 :(得分:7)

{p> END块不是-i -n魔法的一部分。

-n在您的代码周围(大部分)包含隐式while (<>),而-i会导致<>处理的文件被覆盖。

但是,正如所指出的in the docsBEGINEND阻止 之外的隐式循环,并且不受{{1}的影响}。没有任何因素导致-i print到任何地方。