my %CoreMemNodes = (); #HoA -> -> (node1,node2,..) foreach my $node (keys %free_space) { push @{ $CoreMemNodes{$free_space{$node}{'cores'}}{$free_space{$node}{'mem'}} }, $node; } foreach my $free_cores (sort { $b <=> $a } keys %CoreMemNodes) { foreach my $free_mem (sort { $b <=> $a } keys %{ $CoreMemNodes{$free_cores} }) { foreach my $node (sort @{ $CoreMemNodes{$free_cores}{$free_mem} }) { print "SORTED:$free_cores $free_mem $node\n"; } } }