$VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Calculator' }; $VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Calculator/Budget' }; $VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Calculator/Budget/Account' }; #### $VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Calculator' }; $VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Budget' }; $VAR1 = { 'KEYS' => 'APPLICATION_SERVER/SERVICE_LIST/Account' }; #### my $source = getHash(); my %container; tie %container,'Tie::IxHash'; walkHash($source, \%container); sub walkHash { my $h = shift; my $container = shift; foreach my $key (keys %$h) { if($key ne 'Leaf' && ref $h->{$key} ) { $container->{KEYS} = "$container->{KEYS}/$key" if(exists $container->{KEYS}); $container->{KEYS} = $key unless(exists $container->{KEYS}); walkHash($h->{$key}, $container); } else { #Process hash under 'LEAF' key here. print Dumper($container); } } } sub getHash { my %hash = ( 'APPLICATION_SERVER' => { 'SERVICE_LIST' => { 'Account' => { 'Leaf' => { 'EXECUTION' => { 'VALUE' => 'EMPTY' }, 'MODULE' => { 'VALUE' => 'w.exe' }, 'APPLICATION' => { 'VALUE' => 'EMPTY', 'Id' => 'Account', 'Parent' => 'w.default' }, 'PATH' => { 'VALUE' => '$(res.home)acc' } } }, 'Calculator' => { 'Leaf' => { 'EXECUTION' => { 'VALUE' => 'EMPTY' }, 'MODULE' => { 'VALUE' => 'x.exe' }, 'APPLICATION' => { 'VALUE' => 'EMPTY', 'Id' => 'Calculator', 'Parent' => 'w.default' }, 'PATH' => { 'VALUE' => '$(res.home)$(res.slash)cal' } } }, 'Budget' => { 'Leaf' => { 'EXECUTION' => { 'VALUE' => 'EMPTY' }, 'MODULE' => { 'VALUE' => 'w.exe' }, 'APPLICATION' => { 'VALUE' => 'EMPTY', 'Id' => 'Budget', 'Parent' => 'w.default' }, 'PATH' => { 'VALUE' => '$(res.appl)$(res.slash)bud' } } }, } } ); return \%hash; }