in reply to Re: File::Find incompatible with OO perl?
in thread File::Find incompatible with OO perl?

This is almost good equivalent to my wanted subroutine. However, I'm still losing the contents of $_; I guess i just have to use  find(sub{$obj->found($_)},$directory); Thanks!

Replies are listed 'Best First'.
Re: Re: Re: File::Find incompatible with OO perl?
by ysth (Canon) on Feb 09, 2004 at 17:59 UTC
    Are you sure you mean $_ and not (after first shift) $_[0]? wanted doesn't get any parameters, so what you have above is only correct if your found() expects the filename via a parameter, not $_.

    This works for me:

    $ perl -MFile::Find -we'$obj=bless []; sub found { print "looking at $ +_\n" } > find(sub {$obj->found}, "pbed/fooble")' looking at . looking at a looking at b looking at c

      wanted(), being the non-OO answer, is supposed to recieve a file name via $_. Check the perldoc, it backs me up. Not that I'm saying its the best way that this should have been done, but find is supposed to produce 3 elements for your called subroutine:

      • $File::Find::name => Path + Filename.
      • $File::Find::dir => Path
      • $_ => Filename

      I'm not sure whether it clashes or agrees with your statement. Regardless, I'm getting the data as I think it works, like this:

      Calling:

      find(sub{$obj->found($_)},"dir");

      Called:

      sub found { my $self=shift; my ($full_name, $file_dir,$file_name) = ($File::Find::name,$File::F +ind::dir,@_); }

      Thanks again!!