我必须使用File::Find::Rule(或类似名称)搜索文件的大型目录结构。
出于测试目的,我希望在找到一定数量的文件后停止运行。
我已经将->exec()
与state
或全局范围变量一起使用,但是我还没有找到一种不使用标签就退出搜索的方法……有没有一种方法可以优雅地做到这一点? / p>
答案 0 :(得分:3)
一种中止搜索的方法是,从die
处理程序中调用exec
,然后使用eval
在外部范围中捕获异常。例如:
use feature qw(say);
use strict;
use warnings;
use File::Find::Rule;
my $count = 0;
my @files;
eval {
File::Find::Rule->new->file
->exec( sub { die if $count++ > 10; push @files, $_[2]; return 1; })->in('.');
};
if( $@ ) {
say "Aborted search after ", $count - 1, " matches";
}