use warnings; use strict; use XML::Twig; open File, 'test.xml'; sysread(FILE, my $str, -s FILE); my $t = XML::Twig->new( twig_handlers => { student => \&student, }, pretty_print => 'indented', ); $t->parse($str); $t->print($str); print "\n"; close FILE; sub student { my ($t, $elt) = @_; if ($elt->field('id') eq '002') { $elt->first_child('gpa')->set_text('B'); } }