#! perl -slw use strict; use Data::Dump qw[ pp ]; my %hohohoh = map{ 'meas_'.$_ => { map { 'suffix_' . $_ => { map { 'C' . $_ => { value => rand 20 } } 1 .. 4 } } 1 .. 3 } } 1 .. 2; pp \%hohohoh; my %ordered; push @{ $ordered{ $_->[0] }{ $_->[ 2 ] } }, $_->[1] for sort { $a->[2] cmp $b->[2] || $a->[3] <=> $b->[3] } map { my $name = $_; map{ my $suffix = $_; map[ $name, $suffix, $_, $hohohoh{$name}{$suffix}{$_}{value} ], keys %{ $hohohoh{$name}{$suffix } }; } keys %{ $hohohoh{$name} }; } keys %hohohoh; pp \%ordered; __END__ C:\test>junk62 { meas_1 => { suffix_1 => { C1 => { value => "16.4599609375" }, C2 => { value => "18.387451171875" }, C3 => { value => "14.3621826171875" }, C4 => { value => "15.8447265625" }, }, suffix_2 => { C1 => { value => "9.144287109375" }, C2 => { value => "8.1036376953125" }, C3 => { value => "8.3502197265625" }, C4 => { value => "5.1324462890625" }, }, suffix_3 => { C1 => { value => "5.531005859375" }, C2 => { value => "12.1685791015625" }, C3 => { value => "18.5546875" }, C4 => { value => "1.1138916015625" }, }, }, meas_2 => { suffix_1 => { C1 => { value => "16.4349365234375" }, C2 => { value => "7.01171875" }, C3 => { value => "19.0521240234375" }, C4 => { value => "1.4508056640625" }, }, suffix_2 => { C1 => { value => "19.193115234375" }, C2 => { value => "19.6575927734375" }, C3 => { value => "1.6729736328125" }, C4 => { value => "1.9525146484375" }, }, suffix_3 => { C1 => { value => "2.4798583984375" }, C2 => { value => "5.7720947265625" }, C3 => { value => "4.3511962890625" }, C4 => { value => "4.02099609375" }, }, }, } { meas_1 => { C1 => ["suffix_3", "suffix_2", "suffix_1"], C2 => ["suffix_2", "suffix_3", "suffix_1"], C3 => ["suffix_2", "suffix_1", "suffix_3"], C4 => ["suffix_3", "suffix_2", "suffix_1"], }, meas_2 => { C1 => ["suffix_3", "suffix_1", "suffix_2"], C2 => ["suffix_3", "suffix_1", "suffix_2"], C3 => ["suffix_2", "suffix_3", "suffix_1"], C4 => ["suffix_1", "suffix_2", "suffix_3"], }, }