私がやろうとしているのは、プログラムにディレクトリを介して再帰させ、ディレクトリ内のすべてのファイルについて、各ファイルで「ERROR」という単語を検索し、そのインスタンスを別のファイルに出力することです。再帰的にすることなく、つまり、cmdで手動でチェックするファイルを入力するだけでこれを行うことができました。再帰するときに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を組み込む方法です。私の質問を適切に説明したことを願っています。何か説明が必要な場合は、何が混乱しているのか教えてください。あなたが答えで与えることができるより多くの説明は、より良いです。ありがとうございました!