代码之家  ›  专栏  ›  技术社区  ›  Igor Liferenko

为什么“perl-i”不就地更改文件?

  •  3
  • Igor Liferenko  · 技术社区  · 9 年前

    我的设置:perl5.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 回复  |  直到 9 年前
        1
  •  7
  •   Paul Roub jim    9 年前

    END 块不属于 -i -n 魔术

    -n 包装隐式 while (<>) 围绕(大部分)代码,以及 -i 导致文件由处理 <> 以被覆盖。

    然而,如前所述 in the docs , BEGIN 块带电 外部 并且不受 -我 。没有什么会导致你 print 去任何地方 stdout .