in reply to Multiple outputs in a CGI script

Something like this may do what you need. Instead of 'switching' tee on and off, use two filehandles.
# unbuffer STDOUT $| = 1; open(TEE, "| tee $filename") || die "Can't open pipe: $!"; # unbuffer output to the pipe. select(TEE); $| = 1; select(STDOUT); print TEE "some stuff that goes both places\n"; print "some stuff that goes to the browser\n"; print TEE "some more stuff that goes places\n";
I've not tested this, but it should do the trick. If you get output in the wrong sequence, the some of the output is being buffered somewhere along the line. Setting $| should keep that from happening...

/\/\averick

Replies are listed 'Best First'.
RE (2): Multiple outputs in a CGI script
by tilly (Archbishop) on Aug 09, 2000 at 23:45 UTC
    I was going to suggest something like that, but then I realized that I did not know off of the top of my head what would happen with buffering, whether tee did it, or not. In general if I don't know the answer to a question like that immediately, I usually think up a pure Perl solution. Besides which, then I know it is cross-platform code. :-)
      I try to stay cross platform too, but since his question used tee, I figure there's not much harm in having my solution use it :)

      The Tie::Tee example on the link you posted is really slick, and is probably the best solution. You wouldn't have the buffering question since there's only one place where you'd write to STDOUT, it wouldn't be exec-ing an external program, and it would be cross-platform.

      /\/\averick