### Iterate.pl use strict; use warnings; use Iterator_Utils; # --------------------------------------------------------- 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; }; } # -------------------------------------------------------- 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($file = NEXTVAL($WrappedXml_file))) print $file; }