#!/usr/bin/perl use strict; use warnings; use feature "say"; my $free_space = { node3 => { cores => 11, mem => 200 }, node10 => { cores => 10, mem => 900 }, node12 => { cores => 11, mem => 500 }, node23 => { cores => 12, mem => 350 }, node456 => { cores => 12, mem => 400 }, node534 => { cores => 12, mem => 400 }, }; say "@$_" for sort { $b->[0] <=> $a->[0] or $b->[1] <=> $a->[1] or $a->[2] cmp $b->[2] } map { [$free_space->{$_}{cores}, $free_space->{$_}{mem}, $_ ]} keys %$free_space; #### 12 400 node456 12 400 node534 12 350 node23 11 500 node12 11 200 node3 10 900 node10