perl -w -MData::Dumper -e ' @old = ( "10.5 AA", "9 AC", "2 BB"); %orcish = (); @new = sort {($orcish{$b} ||= ForceFloat($b)) <=> ($orcish{$a} ||= ForceFloat($a))} @old; print Dumper \@new; sub ForceFloat{ return $_[0] =~ /(\d+\.*\d*)/ ? $1 : 0.0; }'