sub remove_element { my $elem = shift; my @children = @{$elem->getChildNodes()}; if (@children == 0 ){ print $elem->toString; my $parent = $elem->getParentNode(); $parent->removeChild( $elem ); return; } for my $child ( @children ){ print $child->toString(); remove_element( $child ); } }