use XML::Twig;
use IO::Tee;
use feature 'say';
open my $frufile, '>', 'fruit.xml' or die "fruit $!";
open my $vegfile, '>', 'veg.xml' or die "veg $!";
my $tee = IO::Tee->new($frufile, $vegfile);
select $tee;
my $twig=XML::Twig->new(
twig_handlers => {
thing => \&magic,
_default_ => sub {
print '_default_ for '.$_->name." [[[";
$_[0]->flush($tee); #default filehandle = tee
say "]]]";
1;
},
},
pretty_print => 'none',
empty_tags => 'normal',
);
$twig->parse( *DATA );
sub magic {
my ($thing, $element) = @_;
print "magic for ". $element->{att}{type}." [[[";
for ($element->{att}{type}) {
if (/fruit/) {
$thing->flush($frufile);
} elsif (/vegetable/) {
$thing->flush($vegfile);
} else {
$thing->purge;
}
}
say "]]]";
1;
}
__DATA__
Im an apple!
Toronto
Im a carrot!
Melrose
Im a potato!
Im a pear!
Im a pickle!
Patna
Im a banana!
Im an eggplant!
Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu
A
B
####
_default_ for foo[[[1]]]
_default_ for bar[[[2]]]
_default_ for baz[[[3]]]
_default_ for header[[[]]]
magic for fruit [[[Im an apple!]]]
magic for city [[[]]]
magic for vegetable [[[]]]
magic for city [[[]]]
magic for vegetable [[[]]]
magic for fruit [[[Im a pear!]]]
magic for vegetable [[[]]]
magic for city [[[]]]
magic for fruit [[[Im a banana!]]]
magic for vegetable [[[]]]
magic for city [[[]]]
_default_ for thing_list[[[]]]
_default_ for chrzaszcz[[[A]]]
_default_ for zdzblo[[[B]]]
_default_ for trailer[[[]]]
_default_ for batch[[[]]]
####
_default_ for foo[[[1]]]
_default_ for bar[[[2]]]
_default_ for baz[[[3]]]
_default_ for header[[[]]]
magic for fruit [[[]]]
magic for city [[[]]]
magic for vegetable [[[Im a carrot!]]]
magic for city [[[]]]
magic for vegetable [[[Im a potato!]]]
magic for fruit [[[]]]
magic for vegetable [[[Im a pickle!]]]
magic for city [[[]]]
magic for fruit [[[]]]
magic for vegetable [[[Im an eggplant!]]]
magic for city [[[]]]
_default_ for thing_list[[[]]]
_default_ for chrzaszcz[[[A]]]
_default_ for zdzblo[[[B]]]
_default_ for trailer[[[]]]
_default_ for batch[[[]]]