use strict;
use XML::Rules;
my $rules = XML::Rules->new(
stripspaces => 7,
rules => {
_default => 'content',
person => sub {
# push the string we build to the array referenced by the {person} key in the paren tag's hash
return '@person' => "$_[1]->{firstname} $_[1]->{lastname} ($_[1]->{age})"
},
list => sub {
# only interested in the person "attribute"
# due to the previous rule it's an arary ref
return $_[1]->{person};
# and this is wha the $rules->parse() will return
}
}
);
my $people = $rules->parse(\*DATA);
use Data::Dumper;
print Dumper($people);
__DATA__
<?xml version='1.0' encoding='UTF-8'?>
<list name="name list">
<person>
<firstname>Paul</firstname>
<lastname>Rutter</lastname>
<age>24</age>
</person>
<person>
<firstname>Ruth</firstname>
<lastname>Brewster</lastname>
<age>22</age>
</person>
<person>
<firstname>Cas</firstname>
<lastname>Creer</lastname>
<age>23</age>
</person>
</list>