以下のプログラムは、私が説明できない奇妙な出力を私に与えます:
use strict;
use warnings;
use XML::Twig;
my $xml =
q{<block>
<foo>bar baz</foo>
</block>};
my $twig = XML::Twig->new(
TwigHandlers => {foo => \&foo, block => \&block},
);
print "after parse: " . $twig->parse($xml)->sprint;
sub foo {
my ( $twig, $foo ) = @_;
my $text = $foo->sprint("don't print outside element");
my $newSummary = XML::Twig::Elt->parse( '<p><i>' . $text . '</i></p>' );
$newSummary->paste( 'before', $foo);
my $parent = $foo->parent;
# $foo->delete;
print "foo: " . $parent->sprint . "\n\n";
}
sub block {
my ($twig, $block) = @_;
print "block: " . $block->sprint . "\n\n";
}
次のように出力されます。
foo: <block><p><i>bar baz</i></p><foo>bar baz</foo></block>
block: <block><p><i>bar baz</i></p><foo>bar baz</foo></block>
after parse: <block><foo>bar baz</foo></block>
foo
ハンドラー内の小枝を変更しているので、block
ハンドラーがそれを確認できるように変更が残っていますが、処理がすべて完了すると、変更はなくなります。ここで何が起こっているのですか?小枝の寿命の間、変更を固定するにはどうすればよいですか?