The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;

use XML::Twig;

$|=1;

my $i=0;
my $failed=0;

my $TMAX=4; # do not forget to update!

print "1..$TMAX\n";

$i++;
print "ok $i\n"; # loading

my $t= XML::Twig->new( 
         twig_handlers => 
	   { 'elt[@att=~/^v/]' => sub { $i++;
	                                if( $_->att( 'ok') eq "ok")
	                                  { print "ok $i\n"; 
					  }
					else
					  { print "NOK $i\n";
					    # print STDERR "id: ", $_->att( 'id'), "\n";
					  }
				      },
	     'elt[@change=~/^now$/]' => sub { $_[0]->setTwigHandler( 
	                                       'elt[@att=~/^new/]' =>
					           sub { $i++;
						         if( $_->att( 'ok') eq "ok")
						           { print "ok $i\n"; }
                                                         else
							   { print "NOK $i\n"; 
					                     # print STDERR "id: ", $_->att( 'id'), "\n";
							   }
                                                        });
                                            },
                      },
	            );
$t->parse( \*DATA);

exit 0;

__DATA__
<doc id="doc" >
  <elt id="elt1" att="val" ok="ok">foo<elt id="elt2" att="no val" ok="nok"/></elt>
  <elt id="elt3" att="v" ok="ok"/>
  <elt id="elt4" ok="nok"/>q
  <elt id="elt5" change="now"/>
  <elt id="elt6" att="new_val" ok="ok"/>
  <elt id="elt7" att="val" ok="nok"/>
</doc>