It's more than a message; it's a fatal error.
If you run it under diagnostics:
Uncaught exception from user code:
calling depth after parsing is finished at /opt/perl-5.8.6/lib
+/site_perl/5.8.6/i686-linux/XML/Parser/Expat.pm line 474
at /opt/perl-5.8.6/lib/site_perl/5.8.6/i686-linux/XML/Parser.pm line
+192
XML::Parser::parse('XML::Twig=HASH(0x81ec750)', '<node id="17"
+><content>foo bar</content><child file="19.xml" ...') called at 48649
+7.pl line 9
Frankly, I would not expect the parser to brook such treatment. Why not create a new parser in onChild?:
sub onChild
{
my ($t, $child) = @_;
my $atts = $child->atts;
XML::Twig->new( twig_handlers => { child => \&onChild } )
->parsefile($atts->{file});
}