my $dir = "/my_dir"; opendir DIR, $dir or die "$dir: $!\n"; my %subdir; while ( my $month_dir = readdir( DIR ) { next unless ( $month_dir =~ /^\d{8}$/ ); $subdir{$month_dir} = -M $month_dir; } my $latest_dir = ( sort {$subdir{$a}<=>$subdir{$b}} keys %subdir )[0]; # ... #### my $latest_dir = ( map{s/(....)(....)/$2$1/; $_} sort map{s/(....)(....)/$2$1/; $_} grep /^\d{8}$/, readdir DIR )[-1];