Search code examples
perlfile-find

How can I pass a parameter to the wanted function when using Perl's File::Find?


Possible Duplicate:
How do I pass parameters to the File::Find subroutine that processes each file?

One can use Perl's File::Find module like this:

find( \&wanted, @directories);

How can we add a parameter to the wanted function?

For example, I want to traverse the files in /tmp extracting some information from each file and the result should be stored to a different directory. The output dir should be given as a parameter.


Solution

  • You use a closure:

    use File::Copy;
    
    my $outdir= "/home/me/saved_from_tmp";
    find( sub { copy_to( $outdir, $_); }, '/tmp');
    
    sub copy_to
      { my( $destination_dir, $file)= @_;
        copy $file, "$destination_dir/$file" 
          or die "could not copy '$file' to '$destination_dir/$file': $!";
      }