http://www.perlmonks.org?node_id=278030


in reply to recursive complex structure or something like that?

I established a dictionary where each term can have children. The actual rooted structure is a tree. Or what Zaxo said. You have to watch out for circular references in my code.

my %dict; # A reverse index on %dict by id. while (my $line = <$fh>) { my ( $id, $parent, $term ) = split ' ', $line, 3; # Fixed from -3 +per sauoq $dict{$id}{'id'} = $id; $dict{$id}{'parent'} = $parent; push @{$dict{$parent}{'children'}}, $dict{$id}; } use Data::Dumper; print Dumper( \ %dict );

Or with the circular reference problem nixed

use Util::Scalar 'weaken'; my %dict; # A reverse index on %dict by id. while (my $line = <$fh>) { my ( $id, $parent, $term ) = split ' ', $line, 3; # Fixed per sauo +q $dict{$id}{'id'} = $id; $dict{$id}{'parent'} = $parent; push @{$dict{$parent}{'children'}}, $dict{$id}; weaken $dict{$parent}{'children'}[-1]; } use Data::Dumper; print Dumper( \ %dict );