在Perl中,我们通常使用File::Find
进行递归目录遍历,我们经常使用类似于下面的代码来查找基于模式的某些文件。
find(\&filter, $somepath);
sub filter {
my $srcfile = $_;
if -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ {
<Some processing which requires a premature exit>
}
}
这通常非常灵活,但有时候我们想要提前退出查找。在Perl中是否有定义的方法来执行此操作?
答案 0 :(得分:3)
尝试这种可能性对您有用:
在die
函数中 find
并在eval
函数中围绕调用来捕获异常并继续执行您的程序。
eval { find(\&filter, $somepath) };
print "After premature exit of find...\n";
在filter
函数内:
sub filter {
my $srcfile = $_;
if -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ {
die "Premature exit";
}
}
答案 1 :(得分:2)
你可以这样做:
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my $somepath = q(.);
my $earlyexit;
find(\&filter, $somepath);
sub filter {
my $srcfile = $_;
$File::Find::prune = 1 if $earlyexit; #...skip descending directories
return if $earlyexit; #...we have what we wanted
if ( -f $srcfile && $srcfile =~ /<CERTAIN PATTERN>/ ) {
#...<Some Processing which requires premature exit>
# ...
$earlyexit = 1;
}
}