use warnings; use strict; my @files = qw( 3_xy.txt 10_foo.txt 2_bar.txt 1_foobar.txt 5_anton.txt 7_berta.txt 9_claus.txt ); @files = map { join('_', $_->[0], $_->[1]) } sort { $a->[1] cmp $b->[1] } map { [/^(.*)_(.*)$/] } @files; foreach my $file (@files){ print "$file\n"; }