Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Using File::Find

by tmharish (Friar)
on Feb 28, 2013 at 08:24 UTC ( #1021016=note: print w/replies, xml ) Need Help??

in reply to Using File::Find

find ( thats exported by File::Find ) requires you to define a function that will be used to pick files that you are want. Basic usage like so:

use strict ; use warnings ; use File::Find; use Data::Dump; my $dir = shift || die "Dir name missing as argument\n"; my @files = (); find( \&wanted, "$dir" ); dd( \@files ) ; exit() ; sub wanted() { push @files, $File::Find::name if(/\.txt$/i); # .txt or whatever. }

Replies are listed 'Best First'.
Re^2: Using File::Find
by arnaud99 (Beadle) on Feb 28, 2013 at 08:52 UTC


    Another option, and possibly a simpler one for someone new to perl is to use File::Find::Rule. The example below searches through the current directory and its subdirectories, for all files with a .pl extension.

    Note that the result is stored in an array, not a hash. The result can be stored in a hash if the user needs to, but the key/value construct would need to be understood eg, is the key the path, and the value the file name, or is the key the full file name and the value the size of the file (or other attributes) etc....

    use strict; use warnings; use autodie; use File::Find::Rule; my @txt_files = File::Find::Rule ->file ->name('*.pl') ->in('./'); foreach (@txt_files) { print "$_\n"; }

    I hope this helps

Re^2: Using File::Find
by Dr Manhattan (Beadle) on Feb 28, 2013 at 08:54 UTC

    Thank you for the reply. I tried this:

    #!/usr/bin/perl -w use strict; use warnings; use File::Find; use Cwd; my $dir = getcwd; my %hashTS; find(&wantedTS, "$dir"); sub wantedTS() { if ($File::Find::name =~ /(.*)(\.ts)(\.txt)$/) { $hashTS{$File::Find::name}++; } }

    to place text files ending with .ts.txt into my hash, but it doesn't work because "Use of uninitialized value $File::Find::name"

      You're missing a backslash...

      find(\&wantedTS, "$dir");
      package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1021016]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2023-10-04 19:45 GMT
Find Nodes?
    Voting Booth?

    No recent polls found