my @files = qw(3_xy.txt 10_foo.txt 2_bar.txt 1_foobar.txt); @files = map { $_->[0] } sort { $b->[0] <=> $a->[0] } map { [split(/_/, $_)] } @files; foreach my $file (@files){ print "$file\n"; }