my @new_list = map { $_->[0] } sort { $b->[1] cmp $a->[1] } map { ( my $s = $_ ) =~ s/\[(\d+)/sprintf('%010d%s', length($1),$1)/eg; [ $_, $s ] } @split_list; print "@new_list\n"; #### a2_2[10] a2_2[2] a2_2[1] a2_1[10] a2_1[2] a2_1[1] a2_10[10] a2_10[2] a2_10[1] a1_2[10] a1_2[2] a1_2[1] a1_1[10] a1_1[2] a1_1[1] a1_10[10] a1_10[2] a1_10[1] a10_2[10] a10_2[2] a10_2[1] a10_1[10] a10_1[2] a10_1[1] a10_10[10] a10_10[2] a10_10[1]