use strict; use warnings; use Data::Leaf::Walker; my %nested_hash = ( a => { aa => {aaa => 5, aab => 5, aac => 5}, ab => {aba => 5, abb => 5, abc => 5} }, b => { ba => {baa => 5, bab => 5, bac => 5}, bb => {bba => 5, bbb => 5, bbc => 5} } ); my $walker = Data::Leaf::Walker->new( \%nested_hash ); # only iterating over leaves while ( my ( $k, $v ) = $walker->each ) { print "@{ $k } : $v\n"; } # --> I want to iterate over all nodes. # --> wanted solution for @{ $k }: # ('a') # ('a', 'aa') # ('a', 'aa', 'aaa') # ('a', 'aa', 'aab') # ('a', 'aa', 'aac') # ('a', 'ab') # ('a', 'ab', 'aba') # ('a', 'ab', 'abb') # ('a', 'ab', 'abc') # ('b') # ('b', 'ba') # ('b', 'ba', 'baa') # ('b', 'ba', 'bab') # ('b', 'ba', 'bac') # ('b', 'bb') # ('b', 'bb', 'bba') # ('b', 'bb', 'bbb') # ('b', 'bb', 'bbc')