use XML::Rules; use Data::Dumper; my %tag_value; my $tag_name; my $xr = XML::Rules->new( rules => [ value => sub { $tag_value{$tag_name} = $_[1]->{_content} ], start_rules => [ 'summary,detail1,detail2' => sub { $tag_name = $_[0] } ], ); $xr->parse($xml) # I left the xml out print Dumper \%tag_value;