Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Does anyone know how could I search for a specific name in a text file looking inside of a directory?

Replies are listed 'Best First'.
Re: Text files
by dingus (Friar) on Dec 04, 2002 at 08:13 UTC
    This little snippet will do what you want

    You may want to look at File::Find (see Beginners guide to File::Find) for a more elegant way to do this. And there is probably a better way to search for things in the file, such as slurping the whole thing into a single variable.

    use File::DosGlob; my $root = '/some/where/interesting/*'; # don't forget the *! my $name = 'Smith'; # what you are searhcing for my @m = File::DosGlob::doglob(1,$root); for $fn (@m) { if -d($fn) { push @m, File::DosGlob::doglob(1,$fn.'/*'); next; } # uncomment to only search .txt files # next unless ($fn=~/\.txt$/); open (FILE,$fn) or warn "unable to search file $fn because $!\n"; while (<FILE>) { next unless (index($_,$name) >=0); # you could use a regex here print "$fn: $_"; last; # unless you want all occurences } close(FILE); }

    Dingus


    Enter any 47-digit prime number to continue.
Re: Text files
by pg (Canon) on Dec 03, 2002 at 20:09 UTC
    Also you can use grep (unix command), and most versions of grep can iterate thru the whole tree.