my @new_list = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { /(a|b)(\d+)_(\d+)\[(\d+)\]/ or die "Can't parse $_"; [$_, sprintf "$1%05d%05d%05d", $2, $3, $4]; } @split_list;