use strict; use warnings; use XML::Twig; my $xml = q( name1
address1
contact1
name2
address2
contact2
); my %handlers = ( site => sub { # my ($twig, $cnt) = @_; # $cnt is unuseful: iirc $_ is mapped $_[1] $_->delete if $_->children ('name[string() =~ /name2/]'); } ); my $twig= new XML::Twig( PrettyPrint => 'indented', twig_handlers => \%handlers); $twig->parse($xml); $twig->print; # output: name1
address1
contact1