use strict; use XML::Simple; use Data::Dumper; my $xml = new XML::Simple; my $data = $xml->XMLin("data.xml", KeyAttr => [], ForceArray => 1); my @todos = (); push @todos, { data => $_ } for @{$data->{data}}; while (@todos) { my $todo = pop @todos; if ($todo->{data}{id} =~ /^2$/){ print "delete\n"; delete ($todo->{data}); # splice(@{$todo->{data}},0); print Dumper $todo; next; } } XMLout($data, OutputFile => 'out.xml', rootname => 'items', XMLDecl => ''); print Dumper $data;