use warnings; use strict; use Tree::Simple; # make a tree root my $tree = Tree::Simple->new("0", Tree::Simple->ROOT); while() { chomp; my ($child, $parent) = split /:/; my $sub_tree = Tree::Simple->new("$parent", $tree); # explicity add a child to it $sub_tree->addChild(Tree::Simple->new("$child")); } $tree->traverse(sub { my ($_tree) = @_; print (("\t" x $_tree->getDepth()), $_tree->getNodeValue(), "\n"); }); __DATA__ apple:fruit granny smith:apple fuji:apple orange:fruit blood orange:orange mandarine:orange dwarf fuji:fuji #### $ perl test.pl fruit apple apple granny smith apple fuji fruit orange orange blood orange orange mandarine fuji dwarf fuji #### 1 1.1 2 2.1 2.1a 2.2 3