my $newest_time; my @newest_files; my %times; foreach my $file (@files) { my $time = (stat($file))[9]; $times{$file} = $time; if ($time > $newest_time) { $newest_time = $time; @newest_files = $file; } elsif ($time == $newest_time) { push @newest_files, $file; } } foreach my $file (@newest_files) { if ( ...[ this is the file we want ]... ) { return $file; } } @files = sort { $times{$b} <=> $times{$a} } @files; # Remove the ones we already checked. splice(@files, 0, scalar(@newest_files)); foreach my $file (@files) { if ( ...[ this is the file we want ]... ) { return $file; } } #### my %times; $times{$_} = (stat($file))[9] foreach @files; @files = sort { $times{$b} <=> $times{$a} } @files;