for my $scene ( $doc->findnodes('/PLAY/SCENE') ) { ITEM: for my $item ( $scene->findnodes('SPEECH') ) { my $speaker = $item->findvalue('SPEAKER'); next ITEM unless $speaker eq $searchterm; push @{$act{$scene}}, [ map { $_->to_literal } $item->findnodes('LINE') ]; } } #### for my $scene ( keys %act ) { print "SCENE $scene:\n"; print "$searchterm:\n", join "\n", @$_ for @{$act{$scene}}; }