use strict; use warnings; use XML::Rules; open my $XML, '>', 'temp.xml'; print $XML < tag content XML close $XML; my $parser = XML::Rules->new ( style => 'filter', rules => { _default => 'raw', elt => sub { $_[1]->{attr} = 'updated'; return $_[0] => $_[1] }, } ); #$parser->filterfile('temp.xml', 'temp-new.xml'); open my $OUT, '>', 'temp-new.xml' or die; $parser->filterfile('temp.xml', $OUT); close $OUT; open my $IN, '<', 'temp-new.xml' or die; print "::$_" while <$IN>;