package Simple;
use strict;
use warnings;
use Class::XPath
get_name => 'name',
get_parent => 'parent',
get_root => 'root',
get_children => 'kids',
get_attr_names => 'param',
get_attr_value => 'param',
get_content => 'data';
sub name { shift->{name} }
sub parent { shift->{parent} }
sub root { local $_=shift;
while($_->{parent}) { $_ = $_->{parent} }
return $_; }
sub param { if (@_ == 2) { return $_[0]->{$_[1]} }
else { return qw(foo bar baz) } }
sub data { shift->{data} }
sub kids { @{shift->{kids}} }
sub new_root { my $pkg = shift; bless({kids => [], @_}, $pkg); }
sub add_kid { my $self = shift;
push(@{$self->{kids}},
bless({kids => [], @_, parent => $self }, ref $self));
$self->{kids}[-1]; }
1;
syntax highlighted by Code2HTML, v. 0.9.1