in reply to sort HoH by second level values in specific order

See also List::UtilsBy on how to specify the sort routines in a simpler way (without using $a and $b, that is). Unfortunately, you can't easily translate nested sorts to it (or sort1($a, $b) || sort2($a, $b): you need to create a single key for each element and compare it as a string or as a number.
use List::UtilsBy qw{ sort_by }; say join "\t", @{ $free_space->{$_} }{qw{ cores mem }}, $_ for sort_by { sprintf('%03d', 1e4 - $free_space->{$_}{cores}) . sprintf('%05d', 1e6 - $free_space->{$_}{mem}) . $_ } keys %$free_space;
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,