Scroll to navigation

Forest::Tree(3pm) User Contributed Perl Documentation Forest::Tree(3pm)


Forest::Tree - An n-ary tree


  use Forest::Tree;
  my $t = Forest::Tree->new(
      node     => 1,
      children => [
              node     => 1.1,
              children => [
                  Forest::Tree->new(node => 1.1.1),
                  Forest::Tree->new(node => 1.1.2),
                  Forest::Tree->new(node => 1.1.3),
          Forest::Tree->new(node => 1.2),
              node     => 1.3,
              children => [
                  Forest::Tree->new(node => 1.3.1),
                  Forest::Tree->new(node => 1.3.2),
  $t->traverse(sub {
      my $t = shift;
      print(('    ' x $t->depth) . ($t->node || '\undef') . "\n");


This module is a basic n-ary tree, it provides most of the functionality of Tree::Simple, whatever is missing will be added eventually.

This class inherits from Forest::Tree::Pure>, but all shared methods and attributes are documented in both classes.


Return the child at this position. (zero-base index)
Returns the number of children this tree has


True if the current tree has no parent
True if the current tree has no children
Return the depth of this tree. Root has a depth of -1
Add a new child. The $child must be a "Forest::Tree"
Insert a child at this position. (zero-base index)
Remove the child at this position. (zero-base index)
Takes a reference to a subroutine and traverses the tree applying this subroutine to every descendant.
Returns an array reference of all siblings (not including us)
Invokes "reconstruct_with_class" with Forest::Tree::Pure.
Returns the invocant (without cloning).
See "clone" in Forest::Tree::Pure.

This variant will not clone the parent, but return a clone of the subtree that is detached.

Returns the index of the tree in the list of children.

Equivalent to calling "$tree-"parent->get_child_index($tree)>.

Returns -1 if the node has no parent (the root node).


All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT.


Stevan Little <>


Copyright 2008-2014 Infinity Interactive, Inc.


This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

2022-06-14 perl v5.34.0