Dermot wrote: > Hi All, > > I was have to create a script to search and find files. The files will > end in 'a.txt', 'b.txt', 'c.txt', so a record could have 123a.txt, > 123b.txt, 123c.txt. > > There may be lots of ways to achieve my goal but I got curious about > how to create a structure that, for each record would store the > associated files. Below is what I started out with. The hash tries 3 > ways to either return a code reference or a true/false value if the > file exists. I have tried putting junk values in the hash values - sub > { return -e "$File::Find::dir/${num}Z.txt"} - but it always ouputs > with a YES. > > So how do you create a code reference in this context, should I create > a code reference or use something else and what should I be test the > hash values for? > Thanx in advance. > Dp. > > > > #!/usr/bin/perl > > use strict; > use warnings; > use File::Find; > > my $root = shift; > my @records; > > find(\&wanted, $root); > > for (@records) { > print $_->{name},"\t"; > foreach my $l (qw/a b c j/) { > if ($_->{$l}) { > print "YES\t"; > } > else { > print "No\t"; > } > } > print "\n"; > } > > > sub wanted { > > my ($num,$let) = ($_ =~ /(\d+)([\w{1}])\.txt/); > print $_, " $num Let=$let\n" if ($let !~ /i|j|k/) ; > > my @sizes = qw(a b c d e f h i j k); > > my %file = ( > name => "f001/$num", > a => sub { return -e "$File::Find::dir/${num}a.txt"}, > b => sub { return -e "$File::Find::dir/${num}b.txt"}, > c => sub { return does_exist("$File::Find::dir/${num}c.txt") }, > j => \&does_exist("$File::Find::dir/${num}c.txt"), > ); > push(@records, \%file); > > } > > sub does_exist { > my $file = shift; > return sub { return -e $file }; > }
Please describe your design, without reference to Perl code. Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/