#!/usr/bin/perl -w use strict; my %hoh_test; $hoh_test{foo1}{bar} = -0.12697; $hoh_test{foo1}{baz} = -0.000398154; $hoh_test{foo2}{bar} = -4.0183e-05; $hoh_test{foo2}{baz} = 0; $hoh_test{foo3}{bar} = 9.966003977e-06; $hoh_test{foo3}{baz} = 0.0001939; # sort descending by value my %sorter; foreach my $foo (keys(%hoh_test)) { foreach my $ba (sort {$hoh_test{$foo}{$b} <=> $hoh_test{$foo}{$a}} keys(%{$hoh_test{$foo}})) { push @{$sorter{$hoh_test{$foo}{$ba}}}, [ $foo, $ba ]; } } foreach my $val (sort {$a<=>$b} keys %sorter) { foreach my $keys ( @{$sorter{$val}} ) { print "foo: $$keys[0], ba: $$keys[1], value: $hoh_test{$$keys[0]}{$$keys[1]}\n"; } } #### foo: foo1, ba: bar, value: -0.12697 foo: foo1, ba: baz, value: -0.000398154 foo: foo2, ba: bar, value: -4.0183e-05 foo: foo2, ba: baz, value: 0 foo: foo3, ba: bar, value: 9.966003977e-06 foo: foo3, ba: baz, value: 0.0001939 #### #!/usr/bin/perl -w use strict; my %hoh_test; $hoh_test{foo1}{bar} = -0.12697; $hoh_test{foo1}{baz} = -0.000398154; $hoh_test{foo2}{bar} = -4.0183e-05; $hoh_test{foo2}{baz} = 0; $hoh_test{foo3}{bar} = 9.966003977e-06; $hoh_test{foo3}{baz} = 0.0001939; # sort descending by value my %sorter; foreach my $foo (keys(%hoh_test)) { foreach my $ba (keys(%{$hoh_test{$foo}})) { push @{$sorter{$hoh_test{$foo}{$ba}}}, [ $foo, $ba ]; } } foreach my $val (sort {$b<=>$a} keys %sorter) { foreach my $keys ( @{$sorter{$val}} ) { print "foo: $$keys[0], ba: $$keys[1], value: $hoh_test{$$keys[0]}{$$keys[1]}\n"; } }