use strict; use warnings; no warnings 'uninitialized'; use XML::Rules; my $xmlStr = < hello bye later bye later sometime XML my $parser = XML::Rules->new( stripspaces => 7, rules => { 'q,xr' => sub { return if $_[1]->{supp} eq 'yes' or $_[1]->{info} eq 'yes'; return '+count' => 1; }, qp => sub { printf "Definition '%s' has %d quotations.\n", $_[1]->{name}, $_[1]->{count}+0; return '+total' => $_[1]->{count}+0; }, foo => sub { return $_[1]->{total} }, _default => '', }, ); my $total = $parser->parse($xmlStr); print "The total count is $total\n";