watch out for cyclic structures.

use strict; use warnings; use Data::Dumper; no warnings 'once' ; local $Data::Dumper::Sortkeys=1; local $Data::Dumper::Indent=1; use warnings; my $c={}; $c->{'1top'}={name=>'1top',childs=>[],parent=>undef}; makechild(name=>'child1',parent=>'1top'); makechild(name=>'child2',parent=>'1top'); makechild(name=>'child21',parent=>'child2'); makechild(name=>'child22',parent=>'child2'); print Dumper($c); sub makechild{ my %args=@_; my $node={}; $c->{$args{name}}=$node; $node->{name}=$args{name}; $node->{childs}=[]; my $parent=$c->{$args{parent}}; $node->{parent}=$parent; push @{$parent->{childs}},$node; }
I think Dumper does it with a 'global' hash of all places already visited.
$VAR1 = { '1top' => { 'childs' => [ { 'childs' => [], 'name' => 'child1', 'parent' => $VAR1->{'1top'} }, { 'childs' => [ { 'childs' => [], 'name' => 'child21', 'parent' => $VAR1->{'1top'}{'childs'}[1] }, { 'childs' => [], 'name' => 'child22', 'parent' => $VAR1->{'1top'}{'childs'}[1] } ], 'name' => 'child2', 'parent' => $VAR1->{'1top'} } ], 'name' => '1top', 'parent' => undef }, 'child1' => $VAR1->{'1top'}{'childs'}[0], 'child2' => $VAR1->{'1top'}{'childs'}[1], 'child21' => $VAR1->{'1top'}{'childs'}[1]{'childs'}[0], 'child22' => $VAR1->{'1top'}{'childs'}[1]{'childs'}[1] };


In reply to Re: Beautiful recursive print by huck
in thread Beautiful recursive print by chimiXchanga

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.