use strict; use warnings; my %HoH = ( SUB1 => { Test1 => { value1 => "2300", value2 => "0.01", }, Test2 => { value1 => "5000", value2 => "0.34", }, }, SUB2 => { Test1 => { value1 => "2800", value2 => "0.05", }, }, ); my %hoa; for my $I (sort keys %HoH){ for my $J (sort keys %{ $HoH{$I} }) { for my $K (sort keys %{ $HoH{$I}{$J} } ){ push @{$hoa{$J}}, [$I,$K, $HoH{$I}{$J}{$K}]; } } } for my $k (sort keys %hoa){ my $entry=$hoa{$k}; print "For $k\n"; for my $item(sort {$a->[1] cmp $b->[1] } @$entry){ print " $item->[0] has $item->[1]=$item->[2]\n" } } __OUTPUT__ For Test1 SUB1 has value1=2300 SUB2 has value1=2800 SUB1 has value2=0.01 SUB2 has value2=0.05 For Test2 SUB1 has value1=5000 SUB1 has value2=0.34