# one element $HoH{flintstones}{wife} = "wilma"; # another element $HoH{jetsons}{'his boy'} =~ s/(\w)/\u$1/; # print the whole thing foreach $family ( keys %HoH ) { print "$family: "; foreach $role ( keys %{ $HoH{$family} } ) { print "$role=$HoH{$family}{$role} "; } print "\n"; } # print the whole thing, using temporaries while ( ($family,$roles) = each %HoH ) { print "$family: "; while ( ($role,$person) = each %$roles ) { # using each precludes sorting print "$role=$person "; } print "\n"; } # print the whole thing somewhat sorted foreach $family ( sort keys %HoH ) { print "$family: "; foreach $role ( sort keys %{ $HoH{$family} } ) { print "$role=$HoH{$family}{$role} "; } print "\n"; # print the whole thing sorted by number of members foreach $family ( sort { keys %{$HoH{$b}} <=> keys %{$HoH{$b}} } keys %HoH ) { print "$family: "; foreach $role ( sort keys %{ $HoH{$family} } ) { print "$role=$HoH{$family}{$role} "; } print "\n"; } # establish a sort order (rank) for each role $i = 0; for ( qw(lead wife son daughter pal pet) ) { $rank{$_} = ++$i } # now print the whole thing sorted by number of members foreach $family ( sort { keys %{$HoH{$b}} <=> keys %{$HoH{$b}} } keys %HoH ) { print "$family: "; # and print these according to rank order foreach $role ( sort { $rank{$a} <=> $rank{$b} } keys %{ $HoH{$family} } ) { print "$role=$HoH{$family}{$role} "; } print "\n"; }