Main(); Main { my %dtree = init(); processDtree(\%dtree); } sub processDtree { my $rh_dtree = shift; foreach my $parent ( keys %{$rh_dtree} ) { my @nodenames = (); hash_walk( \%{$rh_dtree->{$parent}},[],\@nodenames); print join("\n",@nodenames) . "\n"; exit; } } sub hash_walk { my ($rh_dtree,$ra_keys,$ra_nodenames) = @_; while (my ($k, $v) = each %$rh_dtree) { # keep keys ordered. push(@$ra_keys,$k); if ( scalar keys %{$v} ) { hash_walk($v,$ra_keys,$ra_nodenames); } } push(@$ra_nodenames, join(".",@$ra_keys)); @$ra_keys = (); }