如何限制File :: Find :: Rule的结果

时间:2018-06-28 12:50:39

标签: perl

我必须使用File::Find::Rule(或类似名称)搜索文件的大型目录结构。

出于测试目的,我希望在找到一定数量的文件后停止运行。 我已经将->exec()state或全局范围变量一起使用,但是我还没有找到一种不使用标签就退出搜索的方法……有没有一种方法可以优雅地做到这一点? / p>

1 个答案:

答案 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";
}