this is basically the same idea as poj (and reusing poj's input data), except that this does not bother to create an explicit temporary array:
This gives the following output:#!/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;
which I believe is what you want.12 400 node456 12 400 node534 12 350 node23 11 500 node12 11 200 node3 10 900 node10
This is the idea of a data pipeline. The code should be read from bottom to top (and right to left). The map in the second line creates an in-memory list of anonymous arrays, which is then sorted and displayed by the first line.
In reply to Re: sort HoH by second level values in specific order
by Laurent_R
in thread sort HoH by second level values in specific order
by lener
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |