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

Re: Processing directories (again) with File::Find

by submersible_toaster (Chaplain)
on Jun 16, 2003 at 07:48 UTC ( #266128=note: print w/replies, xml ) Need Help??

in reply to Processing directories (again) with File::Find

To get the order of files correct, I think you would be better off using the preprocess method of File::Find. Applying a sort on the contents of a subdir, before the call to \&Wanted.

From the POD
The value should be a code reference. This code reference is used to preprocess the current directory. The name of currently processed directory is in $File::Find::dir. Your preprocessing function is called after readdir() but before the loop that calls the wanted() function. It is called with a list of strings (actually file/directory names) and is expected to return a list of strings. The code can be used to sort the file/directory names alphabetically, numerically, or to filter out directory entries based on their name alone. When follow or follow_fast are in effect, preprocess is a no-op.
use File::File; find( { wanted=>\&Wanted , preprocess=>\&PreProcess , } $dir ); sub PreProcess { return sort { $a cmp $b } @_; } sub Wanted { if ( $_ =~ /\d+\.\d+/ ) { open ( FILE , $_ ) or die "Screaming $!"; my @lines = <FILE>; doStuffwith(@lines); } else { return } }

Tuning the sort in PreProcess will allow you to work on files in the order that you want. I suspect you'd want to filter out '.' and '..' and any other undesirable directories so that Wanted is only working on ... the files you want!

Code is untested.
I can't believe it's not psellchecked

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (4)
As of 2019-05-20 04:23 GMT
Find Nodes?
    Voting Booth?
    Do you enjoy 3D movies?

    Results (123 votes). Check out past polls.