就地编辑的大多数示例是遍历一个或多个文件的单行程序,每次读取和打印一行。读取整个文件,然后在就地编辑时打印?
我找不到任何将整个文件读入数组,根据需要修改数组,然后使用^ 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空,打印编辑的内容输出到标准输出代替。
为什么你找不到任何的例子,是因为在Perl中读取整个文件通常被认为是不好的做法,只能进行逐行处理。 :)有很多更好的方法来处理阅读。请参阅下面的答案,了解几个具体原因。 – 2011-02-02 21:39:47
对不起@Robert P,但是有很多线处理任务,最容易首先加载所有线。如果你想删除文件中间的行,该怎么办?在包含其他图案的线条之前,删除包含700至750行*之间图案的线条?在排序后处理输入,然后在打印前删除顶部和/或底部的一些行? – mob 2011-02-02 23:04:48
伟大的答案。 @ mob和@ ephemient都是我想要的东西,所以真的是要抛弃,接受。 – d5e5 2011-02-03 19:15:27