use strict; use warnings; use XML::Twig; my %ok_cities; my $twig= XML::Twig->new(pretty_print => 'indented', twig_handlers=>{ '/cities/City/StreetList/Street'=>sub{ if ($_[1]->att('bars')!~/none/){ push @{$ok_cities{$_[1]->parent()->parent()->att('name')}}, $_[1]->att('name'); } } } ); $/=''; $twig->parse(); print map {"In '$_' these streets have bars: ". (join',',@{$ok_cities{$_}}). "\n"} sort keys %ok_cities; __DATA__