in reply to Redirecting STDOUT

Here is a trick I've used before. I know it works on windows...but I haven't tried it on unix. You'll need to download IO::Scalar, it comes with IO-stringy.
use IO::Scalar; my $output; tie (*STDOUT, 'IO::Scalar', \$output); # Use this to capture STDOUT print "testout\n"; untie *STDOUT; # Use this to return STDOUT to normal print "my output='$output'";
I hope this works for you.

Replies are listed 'Best First'.
Re: Re: Redirecting STDOUT
by mt2k (Hermit) on Jun 15, 2002 at 04:20 UTC
    I never thought of tieing the variable... this is how I use IO::Scalar when I wish to redirect output.
    It's actually more useful for when you just need to have output to a variable rather than to some file handle:

    use IO::Scalar; my ( $STD1 $STD2 ); $STD1 = new IO::Scalar \$STD2; select $STD1; print <<DONE; blah blah blah All this is being appended to the $STD2 variable So some more text here and we are... DONE open FILE, ">test.txt"; print FILE $STD2; close FILE;
    Yes, odd example since you could have just used:

    open FILE, ">test.txt"; select FILE; print <<DONE; all that stuff again. I am DONE

    But you get the point...