大多数就地编辑的示例是单行代码,它遍历一个或多个文件,一次读取和打印一行。
我找不到任何将整个文件读入数组、根据需要修改数组、然后在使用 ^I 开关进行就地编辑时打印数组的示例。当我尝试从菱形运算符读取整个文件、编辑内容并打印整个内容时,我发现打印到 STDOUT 而不是 ARGVOUT 并且 ARGVOUT 已关闭。我可以打开相同的文件进行输出,然后打印到它,但我不确定我是否理解为什么这是必要的。这是一个例子:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my $filename = 'test.txt';
push @ARGV, $filename;
$^I = ".bk";
my @file = <>; #Read all records into array
chomp @file;
push @file, qw(add a few more lines);
print join "\n", @file; #This prints to STDOUT, and ARGVOUT is closed. Why?
运行上述命令会按预期备份 test.txt 文件,但会将编辑后的 test.txt 保留为空,而是将编辑后的内容打印到 STDOUT。