my @sorted = sort { property($a) <=> property($b) } @unsorted; #### ($foo, $bar, $baz, ...) #### { property($a) <=> property($b) } #### ([$foo, property($foo)], [$bar, property($bar)], [$baz, property($baz)], ... ) #### { $a->[1] <=> $b->[1] } #### my @st = map { [ $_, property($_) ] } @files; my @sorted_st = sort { $a->[1] <=> $b->[1] } @st; my @sorted = map { $_->[0] } @sorted_st; sub property { ( $_[0] =~ /fwlog\.(\d+)\w+/ )[ 0 ] }; #### my @sorted = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [ $_, ( $_[0] =~ /fwlog\.(\d+)\w+/ )[ 0 ] ] } @files; #### sort { $a->[1] <=> $b->[1] or $a->[2] cmp $b->[2] or $b->[3] <=> $a->[3] }