我想要做的是讓我的程序通過一個目錄進行遞歸,並對目錄中的所有文件進行遞歸,在每個文件中搜索單詞「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