my %h; # the inverted hash for my $de ( keys %{ $hash{A}{B}{C} } ) { # gives D, E for my $k ( keys %{ $hash{A}{B}{C}{$de} } ) { $h{$k}{$de} = $hash{A}{B}{C}{$de}{$k}; } } # now print it out: for my $k ( sort keys %h ) { for my $de ( sort keys %{$h{$k}} ) { print "$k = $h{$k}{$de} (from $de)\n"; } }