http://www.perlmonks.org?node_id=266128


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
preprocess
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