さらに混ぜっ返しつつ warnings clean に。

print map "$_\n",
  sort {
    return $b =~ /^\d+$/ ? $a <=> $b : -1 if $a =~ /^\d+$/;
    return $b !~ /^\d+$/ ? $a cmp $b : 1;
  } keys %test;

>>348 のケースだと四行目は単に $a cmp $b; でもヨシだけれど、1 と -1 を交換すると逆のニーズにも対応できるという噂。