my @old = ("10.5 AA", "100 NO"); my @new = map { join(' ',@$_) } sort { ($b->[0] <=> $a->[0]) || ($b->[1] cmp $a->[1]) } map { ($1,$2) if m/(.*?)\s(.*)/ } @old;