... my @flipped_hash = reverse sort {$a->[0] <=> $b->[0] } flippout %bdry; ... #### ... for my $k ( @flipped_hash ) { print " \$bdry{$k->[1]}{$k->[2]} = $k->[0];\n", } ... #### $bdry{1}{2} = 3; $bdry{3}{4} = 2; $bdry{2}{3} = 1; #### ... sub flippout { my %h = @_; my @f; while( my ($k,$v) = each %h ) { while( my ($vk,$vv) = each %$v) { push @f, [$vv, $k, $vk] } } return @f } ...