所以我的程序应该递归地遍历一个目录,然后对于目录中的每个文件,打开文件并搜索单词“error”“fail”和“failed”。然后它应该将这些单词出现的实例以及这些单词之后的行中的其余字符写入命令提示符中指定的文件。我在确保程序对目录中找到的文件执行搜索时遇到了一些麻烦。现在它确实通过目录进行递归,甚至创建一个要写出的文件,但是,它似乎没有搜索在递归中找到的文件。这是我的代码:
#!/usr/local/bin/perl
use warnings;
use strict;
use File::Find;
my $argument2 = $ARGV[0];
my $dir = "c:/program/Scripts/Directory1"; #directory to search through
open FILE, ">>$argument2" or die $!; #file to write out
my $unsuccessful = 0;
my @errors = ();
my @failures= ();
my @failures2 = ();
my @name = ();
my @file;
my $file;
my $filename;
opendir(DIR, $dir) or die $!;
while($file = readdir(DIR)){
next if($file =~ m/^\./);
foreach(0..$#file){
print $_;
open(FILELIST, '<', $_);
while(<FILELIST>){
if (/Unsuccessful/i){
$unsuccessful = 1;
}
if(/ERROR/ ){
push(@errors, "ERROR in line $.\n");
print "\t\tERROR in line $.:$1\n" if (/Error\s+(.+)/);
}
if(/fail/i ){
push(@failures, "ERROR in line $.\n");
print FILE "ERROR in line $.:$1\n" if (/fail\s+(.+)/);
}
if(/failed/i ){
push(@failures2, "ERROR in line $.\n");
print FILE "ERROR in line $.:$1\n" if (/failed\s+(.+)/);
}
if ($unsuccessful){
}
}
close FILELIST;
}
}
closedir(DIR);
close FILE;
所以,澄清一下,我的问题是“while()”循环中包含的搜索似乎没有在目录中找到的文件上递归执行。您可以就为什么会发生这种情况提供任何评论/建议/帮助将非常有帮助。我是 Perl 的新手,所以一些示例代码也可以帮助我理解你想说的话。非常感谢。