Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re^2: How to read files in all subfolders?

by Lotus1 (Deacon)
on Oct 21, 2012 at 17:59 UTC ( #1000231=note: print w/replies, xml ) Need Help??

in reply to Re: How to read files in all subfolders?
in thread How to read files in all subfolders?


I noticed a few things that could help the performance of your File::Find solution above.

In the search sub:

find( \&search_all_folder, $path ); sub search_all_folder { chomp $_; return if $_ eq '.' or $_ eq '..'; read_files($_) if (-f); }
  • The chomp isn't needed here since File::Find changes to the subdirectory and returns just the filename in $_.
  • The return if line isn't needed since in the next line the read_files() sub is only called for regular files. '.' and '..' are directories so they won't be included.
  • Since the OP specified only to print text files why not use the file test -T? The -f test will allow the program to attempt to print binary files which is pretty annoying if there are any lurking in a subdirectory.

In this function:

sub read_files { my ($filename) = @_; open my $fh, '<', $filename or die "can't open file: $!"; while (<$fh>) { print $_, $/; } }
  • Printing $/ when printing each line will cause an extra blank line to appear since you did not use chomp when the line was read.

And one question: what is the reason for using abs_path? I find that File::Find works fine with relative pathnames. Does it help the performance if an absolute pathname is given?

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2016-10-25 10:39 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (316 votes). Check out past polls.