This module in an fully object-oriented implementation of a simple n-ary tree.
It is built upon the concept of parent-child relationships, so therefore every
Tree::Simple object has both a parent and a set of children (who themselves may
have children, and so on). Every Tree::Simple object also has siblings, as they
are just the children of their immediate parent.
It is can be used to model hierarchal information such as a file-system, the
organizational structure of a company, an object inheritance hierarchy,
versioned files from a version control system or even an abstract syntax tree
for use in a parser. It makes no assumptions as to your intended usage, but
instead simply provides the structure and means of accessing and traversing
This module uses exceptions and a minimal Design By Contract style. All method
arguments are required unless specified in the documentation, if a required
argument is not defined an exception will usually be thrown. Many arguments are
also required to be of a specific type, for instance the $parent argument to
the constructor must be a Tree::Simple object or an object derived from
Tree::Simple, otherwise an exception is thrown. This may seems harsh to some,
but this allows me to have the confidence that my code works as I intend, and
for you to enjoy the same level of confidence when using this module. Note
however that this module does not use any Exception or Error module, the
exceptions are just strings thrown with die.
I consider this module to be production stable, it is based on a module which
has been in use on a few production systems for approx. 2 years now with no
issue. The only difference is that the code has been cleaned up a bit, comments
added and the thorough tests written for its public release. I am confident it
behaves as I would expect it to, and is (as far as I know) bug-free. I have not
stress-tested it under extreme duress, but I don't so much intend for it to be
used in that type of situation. If this module cannot keep up with your Tree
needs, i suggest switching to one of the modules listed in the "OTHER TREE
MODULES" section below.
Stevan Little, <email@example.com>
Rob Kinyon, <firstname.lastname@example.org>