2010-10-21 64 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

相关问题