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') ]; } }