use strict; use warnings; use XML::Rules; use Data::Dumper; my $parser = XML::Rules->new( rules => [ substrate => sub {return '@substrates' => $_[1]->{name}}, product => sub {return '@products' => $_[1]->{name}}, reaction => sub { print "$_[1]->{name} ($_[1]->{type}):\n"; print "\tSubstrates: ", join(", ", @{$_[1]->{substrates}}), "\n"; print "\tProducts: ", join(", ", @{$_[1]->{products}}), "\n\n"; return; }, ], ); $parser->parse(\*DATA); __DATA__