#!/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"; } }