如何在Perl的Find :: Find完成后运行代码?

时间:2010-10-21 20:23:01

标签: perl

Perl问题:

#!/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]查找文件:使用> sub want {#Do something}   2]虽然没有更多要搜索的文件:>做其他事情{}

谢谢!

1 个答案:

答案 0 :(得分: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 { @args=@_; $files_not_found = 0; }
if ($files_not_found) { 
    print "No files found!\n";
}
# Here you do things after find is finished.