So I stepped back for a bit and thought about the the problem people wanted solved. They don't want this:
ok 1 - test 1 not ok 2 - test 2 # Failed test 'test 2' # at t/foo.t line 12. # got: '3' # expected: '4' not ok 3 - whee! # Failed test 'whee!' # at t/foo.t line 13. # +----+-----+----------+ # | Elt|Got |Expected | # +----+-----+----------+ # | 0|1 |1 | # | 1|2 |2 | # * 2|3 |three * # | 3|4 |4 | # +----+-----+----------+ ok 4 - last ok 5 - no warnings To turn into this: ok 1 - test 1 Failed test 'test 2' # at t/foo.t line 12. not ok 2 - test 2 # got: '3' # expected: '4' # +----+-----+----------+ # | Elt|Got |Expected | # +----+-----+----------+ # | 0|1 |1 | not ok 3 - whee! # Failed test 'whee!' # at t/foo.t line 13. # | 1|2 |2 | # * 2|3 |three * ok 4 - last # | 3|4 |4 | # +----+-----+----------+ ok 5 - no warnings The latter is virtually impossible to read but it's a fairly common complaint. But I think that provides us with our answer. The streams only need to be in synch when runtests (or prove) is in VERBOSE mode. There is no information lost and everyone's happy, yes? Otherwise, let STDERR be STDERR and the problem is solved. Does this work? Cheers, Ovid -- Buy the book -- http://www.oreilly.com/catalog/perlhks/ Perl and CGI -- http://users.easystreet.com/ovid/cgi_course/