use strict; use XML::Rules; my $parser = XML::Rules->new( stripspaces => 7, rules => { local => sub { '%local' => {$_[1]->{name} => $_[1]->{value}} }, regional => sub { '%regional' => {$_[1]->{name} => $_[1]->{value}} }, parmsets => 'by name', opt => 'pass', } ); use Data::Dumper; my $data = $parser->parse(\*DATA); print Dumper($data); __DATA__ ...