use strict;
use warnings;
### -------------------------- Util -----------------------
sub Iterator (&) { return $_[0] }
sub NEXTVAL { $_[0]->() }
### -------------------------- Iterator -------------------
sub interesting_files {
my $is_interesting = shift;
my @queue = @_;
return Iterator {
while (@queue) {
my $file = shift @queue;
if (-d $file) {
opendir my $dh, $file or next;
my @newfiles = grep {$_ ne "." && $_ ne ".."} readdir
+ $dh;
push @queue, map "$file/$_", @newfiles;
}
return $file if $is_interesting->($file);
}
return;
};
}
### -------------------------- FileMask -------------------
sub is_WrappedXml {
my $file = shift;
return 1 if $file =~ /WrappedXml.{0,5}\.xml/i;
return;
}
### -------------------------- MAIN -----------------------
my $WrappedXml_file = interesting_files(\&is_WrappedXml, '.');
while (defined(my $file = NEXTVAL($WrappedXml_file))) {
print "$file\n";
}
Best regards,
Allan Dystrup |