2010-10-21 54 views
1

你的Perl問題:如何在Perl的Find :: Find完成後才運行代碼?

#!/usr/bin/perl 
use File::Find; 

#Find files 
find(\&wanted, $dir); 

sub wanted { #Do something } 
#Done going through all files, do below: 

other stuff { } 

所以,我基本上要解析目錄和查找特定類型的文件。我可以用File :: Find成功完成。但是,我的下一步是,一旦我完成搜索文件,我想要執行下一個過程。

問題是,無論如何,我放在子想要{#Do something}後,得到執行,每次,我找不到文件!我知道這對於程序來說只是合乎邏輯的。但是,你能告訴我什麼我需要做的做到這一點:

1]查找文件:使用>子想{#Do東西} 2]雖然沒有更多的文件中搜索:>做些什麼其他{}

謝謝!

回答

1

修訂答:(後OP澄清說,他只是希望以後find()完成搜索運行一些代碼):

由於find()沒有以並行方式進行搜索,它會簡單地返回時,所有的搜索完畢。因此,你不需要做什麼特別的實現你的目標:

find(\&wanted, @directories_to_search); 
# Here be code that runs after search completes. 

原來的答案

您可以設置文件標誌的建國所需的子程序:

my $files_not_found = 1; 
find(\&wanted, @directories_to_search); 
sub wanted { @[email protected]_; $files_not_found = 0; } 
if ($files_not_found) { 
    print "No files found!\n"; 
} 
# Here you do things after find is finished. 
+0

那麼,事實上會有超過1個文件。此外,可能有1到50個文件或更多的任何地方。只有在所有這些50個文件都被解析後,我纔想運行我的下一個功能。如果(!$ count_files)...我不想運行它,這意味着它將運行49次! – c0d3rs 2010-10-21 20:35:41

+0

對不起,錯讀了你的Q. find()不是平行的,(做過「&」會讓你誤以爲它是?),因此find()將不會返回,直到它找到所有文件。在這種情況下,您不需要'$ files_not_found'或其他任何複雜的東西 – DVK 2010-10-21 20:44:13

+0

感謝DVK,我不知道它並不平行。我很欣賞快速回復! – c0d3rs 2010-10-21 20:51:31

相關問題