The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use warnings;

use Tree;
use Tree::Persist;

# ---------------------------------------------

sub report_tree
{
	my($depth, $tree, $stack) = @_;

	push @$stack, ':--' x $depth . $tree -> value;
	push @$stack, map{@{report_tree($depth + 1, $_, [])} } $tree -> children;

	return $stack;

} # End of report_tree.

# ---------------------------------------------

# Create a tree:

my($tree_1) = Tree -> new('A') -> add_child
(
	Tree -> new('"B"'),
	Tree -> new("'C'") -> add_child
	(
		Tree -> new('<D>'),
	),
	Tree -> new('>>>E<<<'),
);

print "Tree before writing: \n";
print join("\n", @{report_tree(0, $tree_1, [])}), "\n";

# Create a datastore:

my($writer) = Tree::Persist -> create_datastore
({
	filename => 'scripts/store.xml',
	tree     => $tree_1,
	type     => 'File',
});

# Retrieve tree:

my($reader) = Tree::Persist -> connect
({
	filename => 'scripts/store.xml',
	type     => 'File',
});

my($tree_2) = $reader -> tree;

print "Tree after reading: \n";
print join("\n", @{report_tree(0, $tree_2, [])}), "\n";