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;