Two things to check.
in reply to IO::Tee not behaving correctly
The first is that something might be doing a select or
missing up the tie. I would try in the middle of your
script calling tied to see if the tie has survived, and
select to see if the output is going where you think.
The second is whether you are producing output at the C
level. For instance if you call system or fork, the
child processes will talk directly to STDOUT without any
chance for Perl's IO layer to capture it and notice the
In either case, the cookbook has an alternate recipe that
might interest you where you fork and filter STDOUT after
the fact. This is more heavyweight, but is a less fragile