Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

recursively passing hash reference

by thealienz1 (Pilgrim)
on Apr 03, 2006 at 07:10 UTC ( #540871=perlquestion: print w/replies, xml ) Need Help??

thealienz1 has asked for the wisdom of the Perl Monks concerning the following question:

I am currently working on code that creates something simliar to a trie structure. My implementation is pretty much trying to create a hash of hash, etc... which should be a problem as I believe I have enough memory.

I have come to a bit a pickle though. It might be that I have been working on this program for awhile and that it is late, but I have come to stopping point. For the life of my I am not able to implement a simple hash reference recursion. Let me explain with my code and expected output.

use strict; use Data::Dumper; my $start; sub add{ my $root = shift; my $level = shift; my @items = @_; if(!@items) {return;} #print "level = $level\n"; while(@items) { my $first = shift @items; $root->{$first}->{count}++; #print "\t" x $level . "first = " . $first . ", values = " . j +oin(',',@items)."\n"; add($root->{$first}->{children}, $level+1, @items); } } add($start, 1, 1..3); add($start, 1, 1..2); print Dumper($start);

Expected output

$VAR1 = { '1' => { 'children' => { '2' => { 'children' => { '3' => { 'count'=>1} }, 'count' => 2}, '3' => {'count' => 1} }, 'count' => 2 }, '3' => { 'count' => 1 }, '2' => { 'children' => { '3' => { 'count' => 1 } }, 'count' => 2 } };

I realize its probably something really trivial that I am missing here, but any help is a appreciated.

Thanks

Replies are listed 'Best First'.
Re: recursively passing hash reference
by planetscape (Chancellor) on Apr 03, 2006 at 09:25 UTC

    atcroft has a very nice recursive function here which can handle a multilevel data structure consisting of arrays, hashes, and scalars. Perhaps you can adapt it to your needs or at least use it as a reference for constructing your own.

    HTH,

    planetscape
Re: recursively passing hash reference
by thealienz1 (Pilgrim) on Apr 03, 2006 at 07:49 UTC

    Alright, just an update. I believe I have found the problem.

    use strict; use Data::Dumper; my $start = {}; sub add{ my $root = shift; my $level = shift; my @items = @_; if(!@items) {return $level-1;} #print "level = $level\n"; while(@items) { my $first = shift @items; $root->{$first}->{count}++; if(!exists($root->{$first}->{children})) {$root->{$first}->{ch +ildren}={};} #print "\t" x $level . "first = " . $first . ", values = " . j +oin(',',@items)."\n"; $root->{$first}->{max} = add($root->{$first}->{children}, $lev +el+1, @items); } } add($start, 1, 1..4); add($start, 1, 1..2); print Dumper($start);

    I was passing hash reference that were undefined, which is not a good thing apparently. So, I fixed that problem.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2019-10-16 19:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?