my @dirs2read = ("/tmp", "/u/files"); foreach my $sp_dir (@dirs2read) { opendir SP, $sp_dir or die "Cannot open $sp_dir for reading: $!"; my @files = map { $_->[1] } sort { $a->[0] <=> $b->[0]} map { [ stat("$sp_dir/$_")->ctime, $_] } grep { /\w/ && !/^TA\d{1,8}$/ && !/gz$/} readdir SP; closedir SP; } #### use File::Find; use Data::Dumper; my @directories = ("/u/files", "/tmp"); my @readfiles; File::Find::find({ preprocess => sub { sort { # Files sort before dirs (-f $a ? (-f $b ? $a cmp $b : -1 ) : (-f $b ? 1 : $a cmp $b)) } @_ }, wanted => sub {push @readfiles, "$File::Find::dir/$_" if (-f); } , postprocess => sub { rmdir $File::Find::dir }, }, @directories); print Dumper \@readfiles;