Revision history for Perl extension Tree::MultiNode. 2.02 2026-04-05 Bug Fixes: - Fix next()/prev() crashing when curr_pos is undef, and fix otraverse parameter handling. PR #7 - Fix first()/last() crashing on leaf nodes, and fix down() corrupting handle state. GH #8, PR #8 - Fix Node::_clone deep cloning children instead of wrapping the arrayref, which caused cloned trees to share child mutations. GH #9, PR #9 - Fix add_child_node destroying the caller's tree when merging, and add validation for negative position arguments. GH #10, PR #10 - Fix circular reference memory leaks by using weak parent refs (Scalar::Util::weaken). GH #21, PR #21 - Fix PREREQ_PM being silently overwritten on older ExtUtils::MakeMaker. PR #31 Improvements: - Add missing Handle::child_values() method. GH #23, PR #23 - Add num_children() method to Node and optimize traverse. PR #33 - Add use warnings to all packages. PR #15 - Modernize Perl pragmas and debug output style. PR #11 - Add edge case test coverage for Handle API behavioral contracts. PR #20 - Correct POD typo in up() method. PR #7 - Update INSTALL to match actual build system (Makefile.PL). PR #18 Maintenance: - Split Node and Handle into separate module files. PR #28 - Split test suite into per-class test files (t/node.t, t/tree.t, t/handle.t). PR #29 - Split bugfix tests into individual t/bugfix-*.t files. PR #34 - Remove unused variables and fix POD documentation. PR #30 - Correct CPAN metadata: Test::More as test dep, add MIN_PERL_VERSION and provides. PR #13 - Update stale GitHub URLs in META_MERGE and skip CLAUDE.md from dist. PR #12 - Add LICENSE, SECURITY, CONTRIBUTING files and update Makefile.PL metadata. GH #14, PR #15 - Add CLAUDE.md with project conventions and generated file docs. PR #26 - Add Markdown README.md generated from POD. 2.01 2026-03-22 Bug Fixes: - Fix remove_child(0) failing because position 0 is treated as falsy. The same || bug affected get_child() and get_child_value(). Fixes GH #1 (rt.cpan.org #83606), PR #2 - Fix Node constructor losing falsy keys like 0 and "". The $key || undef pattern dropped valid falsy values. PR #3 - Fix remove_child() leaving curr_pos and curr_child pointing at stale data after removing a child node. PR #6 - Fix value() setter not accepting falsy values (0, "", undef) due to using defined() instead of argument count check. PR #6 - Fix otraverse() POD heading incorrectly duplicating the traverse heading. PR #6 Improvements: - Add comprehensive test suite (t/02-comprehensive.t) covering 37 subtests across Node, Tree, and Handle packages. PR #4 - Fix stale POD: remove_child heading actually documented kv_pairs. PR #3 Maintenance: - Modernize GitHub Actions CI workflow (Linux Perl 5.8–latest, macOS, Windows). PR #5 - Update MANIFEST for new xt files - Code tidying - Add GitHub README 1.0.14 Fri Jan 22 2020 - Switch to github CI - Switch to github issue tracker. RT going away. - Now using Makefile.PL - perltidy 1.0.13 Fri Feb 19 2010 11:00:00 CST 2010 - Pause hung uploading 1.0.12 grr... 1.0.12 Fri Feb 19 2010 09:00:00 CST 2010 - Tweak to new documentation for CPAN 1.0.11 Fri Feb 19 2010 01:00:00 CST 2010 - Convert module to standart treee layout. - Convert to Test::More suite with additional tests - Generat META.yml file from new Build.PL data - RT #5107 - Documentation patch for Tree-MultiNode-1.0.10 - RT #1743 - Documentation fix for traverse example to be consistent with code - RT #5435 - New add_child_node sub to merge trees - TODO: Need proper pod documentation for new sub. - TODO: Need tests for the new feature. 1.0.10 Tue May 27 14:06:33 EDT 2003 KRB: Markus Maier found a bug in the tree's destructor that happens when a reference to a handle outlives the tree object. $self->{'top'} is then undefined and _clearrefs should not be called (a second time). KRB: fixed documentaiton bug (set_key/set_value), added use strict and warnings to the example in the POD. 1.0.9 Tue Oct 8 20:38:52 EDT 2002 KRB: Gregg Casillo sent in a fix that now allows keys to store the numeric value 0. KRB: fixed reported bug with traverse not passing the new handle. 1.0.8 Wed May 8 10:06:22 EDT 2002 KRB: Papp Zoltan pointed out a bug in Tree::MultiNode::Node's _clearrefs() where an array ref was not being dereferenced correctly. The fix has been applied. 1.0.7 Tue Nov 13 09:00:49 EST 2001 KRB: "Tunkelo Heikki (extern)" subumitted a patch that fixed the select() method. 1.0.6 Wed Dec 13 11:43:11 EST 2000 KRB: traverse was created because of comments from Sverrir Jonsson 1.0.5 Wed Dec 13 11:32:57 EST 2000 KRB: updated traverse so you can pass additional constant arguments to the sub ref. 1.0.4 Wed Dec 13 11:03:17 EST 2000 KRB: added Tree::MultiNode::Handle::traverse as a method that takes a sub ref and invokes the subref for each node in the tree. 1.0.3 Thu Sep 7 11:57:14 EDT 2000 KRB: added Tree::MultiNode::DESTROY, and Tree::MultiNode::Node::_clearrefs so the refcounts of the nodes, as well as the data will go to zero. Eric Joanis pointed out this bug, and sent me an example. The chagnes are based largely on his work, with minor modifications. 1.0.1 Tue Nov 23 11:05:42 EST 1999 KRB: added child_keys to the handle object to return the child keys from the current node. 1.0.1 Fri Jun 4 08:56:26 EDT 1999 KRB: fixed print message in get_child_value() -- it should only print when $debug is defined...the bug was reported by Kohei Ohta 1.0.0 Mon May 17 11:25:51 EDT 1999 DXP: Applied patch from Daniel X. Pape dpape@canis.uiuc.edu, which included: - Node, and Handle objects: moved tree() member function from Node object to Handle object - Handle object: added functionality, and member function for depth tracking as the Handle object is navigated through the tree. - Documentation for the new code. KRB: Added Handle::kv_pairs(), and Handle::remove_child(). KRB: Made minor changes to the debug statements so they print the package name as well as the member function name - just to make it easier to see these messages when used in conjunction with other objects/packages/debugging code. KRB: Minor changes to the new() member functions, so the objects can be constructed in a larger variety of ways. KRB: It seemed stable enough, and failry feature complete, and there didn't seem like there were any more compelling reasons not to, so I updated the version number to 1.0.0 so it looks stable. KRB: All previous changes made by KRB... 0.9.4 Wed Apr 14 12:35:01 EDT 1999 Fixed the issue with make test, and re-released it as 0.9.4 - make test wasn't outputting the standard test output ("ok x"). This was sparked by the CPAN testers group. Thanks. 0.9.3 Wed Nov 4 16:17:49 EST 1998 Again, some minor bug fixes. 0.9.2 Wed Nov 4 16:17:49 EST 1998 Some minor debugging, and added some (hopefuly useful) member functions. 0.9.1 Wed Oct 28 09:39:17 EST 1998 First release to CPAN -- 0.9.1 0.9.1 Wed Oct 28 09:39:17 EST 1998 Made namespace change as suggested by Andreas J. Koenig, and created _alot_ more documentation. 0.9.0 Tue Oct 27 10:34:49 EST 1998 Created Initial Version (multi_tree.pm)