use strict; use warnings; my @list = qw{ a1_2 a1_1 a10_10 a2_10 a2_1 a2_2 a10_1 a10_2 a1_10 }; my @sorted = map { substr $_, 8 } sort map { pack q{NNa*}, m{(\d+)_(\d+)}, $_ } @list; print qq{$_\n} for @sorted; #### a1_1 a1_2 a1_10 a2_1 a2_2 a2_10 a10_1 a10_2 a10_10