我想要做的是让我的程序通过一个目录进行递归,并对目录中的所有文件进行递归,在每个文件中搜索单词“ERROR”,然后打印实例它在一个单独的文件中。我能够做到这一点,而不会使其递归,即只需输入要在cmd中手动检查的文件即可。我想知道递归时使用ARGV的正确方法是什么。这里是我的代码至今:在Perl中通过目录递归时使用ARGV
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $dir = "c:/programs";
find(\&searchForErrors, $dir);
sub searchForErrors()
{
my $seen = 0;
if (-f){
my $file = $_;
my @errors =();
open FILE, $file;
my @lines = <FILE>;
close FILE;
for my $line (@lines){
if (/ERROR/){
push(@errors, "ERROR in line $.\n");
print FILE "ERROR in line $.:$1\n" if (/Error\s+(.+)/);
}
open FILE, ">$file";
print FILE @lines;
close FILE;
}
}
}
我需要知道的是,我怎么可以将ARGV因此,该方案将在目录中的每个文件读取,执行搜索,然后输出搜索结果到一个文件。我希望我已经充分解释了我的问题,如果你需要澄清,让我知道什么是混淆。答案越多,解释就越好。谢谢!
您用输出覆盖输入文件。这似乎是一个非常糟糕的主意,因为它会截断它找到的每个文件。 – TLP
此外,这是你自己的一个问题的副本:http://stackoverflow.com/q/10918750/725418 – TLP