use strict; use warnings; use XML::Rules; use Data::Dumper; my @rules = ( _default => sub { "%".$_[0] => {$_[1]->{name} => $_[1]->{value}}}, main => 'pass no content', ); my $text=< EOF my $p = XML::Rules->new( rules => \@rules, ); my $x = $p->parse($text); print Dumper $x;