http://qs1969.pair.com?node_id=668158


in reply to problems redirecting STDOUT and STDERR to a $variable

When you print without specifying a handle, output goes to the selected handle, which defaults to STDOUT. If you select STDERR, print goes there by default instead. For CGI to work, you must print what the browser receives on STDOUT.

One solution would be to reverse the order of the selects, so STDOUT is left selected after the hot buffering request. Normal practice is to store the return value of the first select and restore it after you finish messing with $|:

my $original_fh = select STDOUT; $| = 1; select STDERR; $| = 1; select $original_fh;
This works even if someone had already hijacked the default output handle.

Phil

The Gantry Web Framework Book is now available.