use strict; use warnings; use Data::Dumper; my %ThreeD = ( TV => { version3 => { lead => "fred", pal => "barney", }, }, ); print Dumper( \%ThreeD ); # print the whole thing foreach my $media ( keys %ThreeD) { print "$media @ {"; for my $media_ver ( keys %{ $ThreeD{$media} } ) { print "$media_ver { "; for my $leaf_obj ( keys %{ $ThreeD{$media}{$media_ver} } ) { print "$leaf_obj=$ThreeD{$media}{$media_ver}{$leaf_obj} "; } } print "}\n"; } __END__ $VAR1 = { 'TV' => { 'version3' => { 'lead' => 'fred', 'pal' => 'barney' } } }; TV @ {version3 { lead=fred pal=barney }