http://www.perlmonks.org?node_id=398641


in reply to Redirecting STDOUT from internal function with 5.6.1 restrictions

Looks to me like the docs of Test.pm need to be improved. If you look into the source you can see that the module makes a reference to the STDOUT as soon as it's used and then prints to that reference.

Anyway it seems that all you need to do is this:

open $Test::TESTOUT, '>', $stdout;
to redirect the output and
close $Test::TESTOUT; $Test::TESTOUT=*STDOUT{IO};
to switch it back.

Jenda
We'd like to help you learn to help yourself
Look around you, all you see are sympathetic eyes
Stroll around the grounds until you feel at home
   -- P. Simon in Mrs. Robinson

Replies are listed 'Best First'.
Re^2: Redirecting STDOUT from internal function with 5.6.1 restrictions
by mgc (Novice) on Oct 12, 2004 at 19:10 UTC
    For a minute there I thought you were on to something, but
    alas it turned out to be an incorrect assumption. Here is
    how I see it...
    
    In the code Test module Test.pm 'makes a copy' of the STDOUT filehandle
    
    
    $TESTOUT = *STDOUT{IO};
    This has the same effect as below:
    open( TESTOUT, ">&STDOUT" ) || die "dup failed";
    In either case Perl comes back complaining that: "A file or directory in the path name does not exist at ...". Which means that the last parameter in the 5.6.1 version of open must point to a string with a path/filename. mgc

      OK then. I should have tested my suggestions. Anyway this does seem to work fine in Perl 5.6.1:

      use FileHandle; use Test; plan(tests => 3); ok("first"); { local $Test::TESTOUT; open $Test::TESTOUT, '>', "$ENV{TEMP}/zkTestRedirect.txt"; ok("second"); } ok("third");

      Jenda
      We'd like to help you learn to help yourself
      Look around you, all you see are sympathetic eyes
      Stroll around the grounds until you feel at home
         -- P. Simon in Mrs. Robinson

        Thanks for the input. It seems thought, your example is still writing to a file. I am trying to trap STDOUT and redirect to a variable(memory).

        mgc