Another perl coding challenge
Eugene Tsyrklevich
eugene at securityarchitects.com
Fri Dec 29 04:35:56 CST 2000
~sdpm~
perldoc File::Find
use File::Find;
find({/\.wel$/ && -f $_ && -T _ && -r _ && print}, $DIR);
good enough? ;-)
cheers
On Thu, Dec 28, 2000 at 06:59:02PM -0800, Todd Rockhold wrote:
> ~sdpm~
> Probably not as fun as Garrett's "reversible NAND gate" problem, but here is
> one I have encountered. I have a test system (Perl 5.6) and a production
> system (Perl 5.005). I would like to run the tree walker on the production
> system.
>
> The following code walks a directory tree if run with Perl 5.6 but fails
> with earlier versions. How do I modify it so that it will work with Perl
> 5.005?
>
> ----------------------------------------------------------------------------
> --------------------------------------------------------------
>
> my $DIR = "//yogi/yogidata/OntoCHROMRun/TestRuns"; # contains well files
> my $it = make_treewalker($DIR, \&is_well_file, sub {@{$_[1]}});
> while (defined (my $f_it=$it->()))
> {
> # process the interesting file
> print "found file: $f_it\n";
> }
>
> sub make_treewalker #black magic to walk the directory tree
> {
> my @queue = shift();
> my ($is_interesting, $userparam) = @_;
> return sub
> {
> while(1)
> {
> return undef unless @queue;
> my $cur = shift @queue;
> if (-d $cur && opendir my $dh, $cur)
> {
> my @files = grep {$_ ne '.' && $_ ne '..'} (readdir $dh);
> push @queue, map {"$cur/$_"} @files;
> }
> return $cur if $is_interesting->($cur, $userparam);
> }
> }
> }
>
>
> sub is_well_file # what files do we care about?
> {
> return () unless -f $_[0] && -T $_[0]; # gotta be a simple file
> return () unless open FH, "< $_[0]"; # gotta be able to open it
> return ($_[0]) if $_[0] =~ /\.wel/i ; # gotta be a .WEL file
> return ();
> }
~sdpm~
The posting address is: san-diego-pm-list at hfb.pm.org
List requests should be sent to: majordomo at hfb.pm.org
If you ever want to remove yourself from this mailing list,
you can send mail to <majordomo at happyfunball.pm.org> with the following
command in the body of your email message:
unsubscribe san-diego-pm-list
If you ever need to get in contact with the owner of the list,
(if you have trouble unsubscribing, or have questions about the
list itself) send email to <owner-san-diego-pm-list at happyfunball.pm.org> .
This is the general rule for most mailing lists when you need
to contact a human.
More information about the San-Diego-pm
mailing list