3

$^I在 perl 脚本中使用过有条件地搜索和替换。我想知道是$^I在缓冲区中复制文件并在处理缓冲区后将整个缓冲区写回文件还是在行编辑中。

代码如下

$^I = "";
my $flag = 0;

while ($line = <>) {
    if($line=~ m/some string/i) {
        $flag = 1;
    }
    if(!$flag) {
        $line =~ s/string/replace/g;
    } 
}

print $line;
4

1 回答 1

8

来自perlvar

$INPLACE_EDIT

$^我

就地编辑扩展的当前值。使用 undef 禁用就地编辑。助记符:-i 开关的值。

perlrun

-i[扩展名]

指定由 <> 构造处理的文件将被就地编辑。它通过重命名输入文件、按原始名称打开输出文件并选择该输出文件作为 print() 语句的默认文件来实现这一点。扩展名(如果提供)用于修改旧文件的名称以制作备份副本,遵循以下规则:

如果没有提供扩展名,并且您的系统支持它,则原始文件会保持打开而没有名称,而输出将重定向到具有原始文件名的新文件。当 perl 退出时,无论是否干净,原始文件都被取消链接。

于 2013-12-27T23:56:20.713 回答