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/


Reply via email to