したがって、私のプログラムは再帰的にディレクトリを調べ、ディレクトリ内のファイルごとにファイルを開いて、「エラー」、「失敗」、「失敗」という単語を検索することになっています。次に、これらの単語が出現するインスタンスと、それらの単語の後の行の残りの文字を、コマンドプロンプトで指定されたファイルに書き出す必要があります。プログラムがディレクトリ内にあるファイルを検索するのに問題があります。現在、ディレクトリを再帰的に処理し、書き出すファイルを作成しますが、再帰で見つかったファイルを検索していないようです。これが私のコードです:
#!/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を初めて使用するので、いくつかのサンプルコードは、あなたが何を言おうとしているのかを理解するのにも役立ちます。どうもありがとうございます。