use XML::Rules; my $parser = XML::Rules->new( rules => [ _default => 'content', book => sub { return unless $_[1]->{category} eq $_[4]->{parameters}; my $title = delete $_[1]->{title}; delete $_[1]->{'_content'}; $title => $_[1], }, bookstore => 'pass no content', ] ); my $category = $ARGV[0] or die "Usage: BookStore2.pl category\n"; my $data = $parser->parse(\*DATA, $category); use Data::Dumper; print Dumper( $data); __DATA__ ...