$|=1; use XML::Rules; $xml = <<'*END*'; Jane Luser JLuser@bogus.com
Washington st. Old Creek The US bleargh
John Other JOther@silly.com
Grant's st. New Creek Canada sdrysdfgtyh degtrhy werthy drthyu
*END* %rules = ( _default => 'content', '^bogus' => undef, # means "ignore" address => 'no content', person => sub { print <<"*END*"; Person: $_[1]->{fname} $_[1]->{lname} Email: $_[1]->{email} Address: $_[1]->{address}{street} $_[1]->{address}{city} $_[1]->{address}{country} *END* }, doc => sub {}, ); my $parser = new XML::Rules ( rules => \%rules, # other options ); my $result = $parser->parsestring($xml); use Data::Dumper; print Dumper($result);