use strict; use warnings; my %hash = ( 'key 1' => { 'innerhash1 key 1' => 'some data', 'innerhash1 key 2' => 'some more data', }, 'key 2' => { 'innerhash2 key 1' => 'even more data', 'innerhash2 key 2' => 'a bit more data', }, ); foreach my $key (keys %hash) { foreach my $inner_key ( keys %{$hash{$key}} ) { print "$inner_key $hash{$key}->{$inner_key}\n"; } }