use strict; use warnings; my @array = qw(2aa 2ba 12kf 9cn 9vn 21sg); my @sorted = map { join('',@$_) } sort { $b->[0] <=> $a->[0] or $a->[1] cmp $b->[1] } map { /(\d+)(\w+)/;[$1,$2] } @array ; print "$_\n" foreach @sorted; __END__ 21sg 12kf 9cn 9vn 2aa 2ba #### map { [/(\d+)(\w+)/] } @array