$ perl -Mstrict -Mwarnings -E ' my $passes = { t1 => { cpu => 73, xx => 3 }, t2 => { cpu => q{-}, xx => 7 }, t3 => { cpu => 17, xx => 0 }, t4 => { cpu => 49, xx => 6 }, t5 => { cpu => q{-}, xx => 4 }, t6 => { cpu => 11, xx => 5 }, }; say for map { $_->[ 0 ] } sort { $a->[ 1 ] <=> $b->[ 1 ] || ( $a->[ 1 ] ? 0 : $a->[ 2 ] <=> $b->[ 2 ] ) } map { [ $_, $passes->{ $_ }->{ cpu } eq q{-}, $passes->{ $_ }->{ cpu }, ] } keys %$passes;' t6 t3 t4 t1 t2 t5 $