in reply to File::Find redux: how to limit hits?

There's probably a more graceful way of doing this, but an eval/die combo should work...

my $MAXHITS = 100; eval { find( \&wanted => $dir ); }; die $@ if $@ && $@ ne "Limit reached\n"; { my $hit_no = 1; sub wanted { die "Limit reached\n" if ++$hit_no > $MAXHITS; printf "%03d %s\n", $hit_no, $File::Find::name; } }

    --k.


Replies are listed 'Best First'.
Re: Re: File::Find redux: how to limit hits?
by grinder (Bishop) on Jun 04, 2002 at 12:15 UTC
    The only way I can see to do it if you want to avoild the eval/die combo is to use $File::Find::prune. This appears to do the trick:

    #! /usr/bin/perl -w use strict; use File::Find; my @hits = (); my $hit_lim = shift || 20; find( sub { if( scalar @hits >= $hit_lim ) { $File::Find::prune = 1; return; } elsif( -d $_ ) { return; } push @hits, $File::Find::name; }, shift || '.' ); $, = "\n"; print @hits, "\n";

    The only problem is that you don't have much control over the order in which File::Find descends through the various directories. (Hint: it is not alphabetical).


    print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u'