Considerably more compile-able than
Utilitarian's code :
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
The code is not the prettiest, - but then, neither is your data structure.
I hope life isn't a big joke, because I don't get it.
-SNL