sub parse { my $item = shift; return [ $item, $item =~ /^(\d+)([a-zA-Z]*)/ ]; } sub sort_alphanum { $a->[ 1 ] <=> $b->[ 1 ] or $a->[ 2 ] cmp $b->[ 2 ]; } my @sorted = map $_->[ 0 ], sort sort_alphanum map parse( $_ ), @old;