Rajesh Dorairajan wrote: > > Hello All, Hello,
> I went through all the documentation and previous mail posts about > File::Find and finally decided I needed some help. > > I've a directory structure I need to parse. The directory contains > subdirectories with filenames such as > > full094382.db > full483292.db > > Now, I need to parse through each subdirectory and pick up the name of the > file that was MODIFIED MOST RECENTLY. I do have a sort of a code to start > with. > > use strict; > use warnings; > > $\ = "\n"; > > use File::Find; > > my $localdir = 'C:/docs'; > my @files; > > find( > sub { push ( @fullcrls, $File::Find::name ) if /^(full)\w*(\.db)$/ }, > $localdir ); > > foreach ( @fullcrls ) { > print; > } > > However, I am not able to figure how to filter out the repeat entries in a > sub-directory such as > > C:/docs/dir1/full094382.db > C:/docs/dir1/full483292.db > C:/docs/dir2/full482952.db > C:/docs/dir2/full930284.db > > In the above example, I need only need filename from dir1 and dir2 that was > last modified. Is there a way to do this filtration in the find( sub {} ) > above? This should do what you want: use strict; use warnings; use File::Find; use vars qw( $dir $name ); *dir = *File::Find::dir; *name = *File::Find::name; my $localdir = 'C:/docs'; my %files; find( sub { return unless -f; ( not exists $files{ $dir } or $files{ $dir }{ mtime } > -M _ ) and ( @{ $files{ $dir } }{ qw/name mtime/ } = ( $name, -M _ ) ) }, $localdir ); for my $entry ( values %files ) { print $entry->{ name }, "\n"; } __END__ John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>