我在perl脚本中使用$^I
来有条件地搜索和替换。我想知道$^I
是否在缓冲区中创建了文件的副本,并在处理缓冲区后将整个缓冲区写回文件,或者在行编辑中执行。
代码如下
$^I = "";
my $flag = 0;
while ($line = <>) {
if($line=~ m/some string/i) {
$flag = 1;
}
if(!$flag) {
$line =~ s/string/replace/g;
}
}
print $line;
答案 0 :(得分:8)
来自perlvar
$ INPLACE_EDIT
$ ^ I
inplace-edit扩展的当前值。使用 undef禁用就地编辑。助记符:-i switch的值。
来自perlrun:
-i [扩展名]
指定由&lt;&gt;处理的文件构造将被就地编辑。它通过重命名输入文件来实现, 按原始名称打开输出文件,然后选择该文件 输出文件作为print()语句的默认值。扩展,如果 提供,用于修改旧文件的名称以进行备份 复制,遵循以下规则:
如果没有提供扩展,那么你的 系统支持它,原始文件保持打开状态没有名称 而输出被重定向到原始文件的新文件 文件名。当perl退出时,干净利落或不干净,原始文件是 未链接。