[英]Find a file and return after the first match in a perl script
我正在使用來自perl的查找。 它可以工作,但是我想在找到第一個匹配項后從想要的子例程中返回(退出),我想停止查找。 我把退貨放了,但是沒用。 這是我的代碼:
find(\&wanted, $dir);
sub wanted {
print "Found it $File::Find::dir/$_\n" if /$file/i;
$found_file = "$File::Find::dir/$_";
return "$File::Find::dir/$_";
}
print $found_file;
$ dir是我要搜索的目錄,$ file是我需要的文件。
我應該在哪里將returi放在子通緝中。 我是perl的新手,感謝您的幫助。 謝謝。
File::Find
是一個古怪的模塊。 它幾乎需要您在wanted
部分中編寫整個程序。 如果您不想這樣做,通常需要使用某種范圍錯誤的變量,這會使事情看起來很丑陋。 另外,它使用一個單獨的子例程,使代碼難以遵循。
問題在於File::Find
不是面向對象的。 如果是這樣,則可以使用一種方法在循環中獲取文件,並且在獲取所需文件時可以退出循環。
幸運的是,已經有一個File :: Find :: Object ,它是File::Find
面向對象版本。
sub find_file {
my @directories = @_;
my $dir_tree = File::Find::Object->new( @directories );
while ( my $file = $dir_tree->next ) {
next unless ... # Code used to determine if file is what you want
return $file
}
return; #Nothing found
}
界面干凈,易於理解。 這就是File::Find
應該如何工作。 我不知道為什么它不是標准的分發模塊。
File::Find
的主要問題是(從Perl 3.x開始)它已經很舊了,並且從未真正打算用作模塊 。 它可以與Perl發行版附帶的find2perl程序一起使用。 想看到丑陋和可怕的東西嗎? 通過find2perl
運行查找查詢並查看結果。 這就是舊的Perl代碼所使用的樣子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.