Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Reading an arbitrary hierarchy into a hash tree

by abstracts (Hermit)
on Aug 07, 2001 at 03:06 UTC ( #102647=note: print w/ replies, xml ) Need Help??


in reply to Reading an arbitrary hierarchy into a hash tree

Hello

Here is one way to do it. It basically uses a stack to keep pointers to the last hash created. Initially, we add a hash ref to it. For every line in our data, we count how many tabs are prepended. This tells us how deep we are in the tree and the stack should be shortened accordingly (pointers from the previous subtree are removed). This data line is then added to the hash pointed to by the last item in the stack. It is also pushed to the stack to make it the new root.

Try tracing the code to see exactly how it works. Btw, empty hashes are used as values of leaf nodes instead of empty strings. Modifying the code to do that should not be hard.

Hope this helps,,,

Aziz

PS. Convert the spaces in the __DATA__ to appropriate tabs.

use Data::Dumper; my @stack; my %hash; push @stack, \%hash; while(<DATA>){ chomp; s/^(\t*)//; splice @stack, length($1)+1; push @stack, $stack[$#stack]->{$_} = {}; } print Dumper(\%hash); __DATA__ foo sub1 sub2 sub21 sub22 bar camel
Here is the dump:
$VAR1 = { 'foo' => { 'sub1' => {}, 'sub2' => { 'sub21' => {}, 'sub22' => {} } }, 'bar' => { 'camel' => {} } };


Comment on Re: Reading an arbitrary hierarchy into a hash tree
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://102647]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2014-09-30 22:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (385 votes), past polls