Greetings, I have moved a big collection of modules to mod_perl2 under PerlRun and can see a great speedup, as hoped. But in some of these modules programs are run that write something to STDOUT that is then captured and processed - which doesnt work since STDOUT is tie'ed to Apache. I saw suggestions to use the $r-> interface, but I prefer to not be mod_perl specific (write handlers or use the request object etc), at least not until later. So to "borrow" STDOUT temporarily I did the attempt below (found in Stas Bekmans 1.0 practical mod_perl), which opens a temporary STDOUT into a string. Printing to STDOUT works as hoped, but output from other programs run by system do not appear in $out_str; instead they appear - most of the time, sometimes not - in the console where Apache was started (with httpd -X). I can put the command line to run in backticks and do print [EMAIL PROTECTED], and that too works, but would like to use system, Proc::SafeExec, etc. I use Apache 2.2.9, mod_perl 2.0.4 and Linux. Below the example is the mod_perl part of httpd.conf.
Any ideas? (I'm sure its something obvious i missed, but it has become an obstacle for me) Niels L ------------------------------ test.cgi <pre> #!/usr/bin/env perl use strict; use warnings FATAL => qw ( all ); use Symbol; my ( $out_fh, $out_str ); { $out_str = ""; $out_fh = Symbol::gensym(); open $out_fh, '>', \$out_str or die "Can't open stdout to string: $!"; $| = 1; local *STDOUT = $out_fh; # Print always puts output into always goes into $out_str, print "hello\n"; # But commands like date, ls etc goes into $out_str sometimes, # sometimes at console where apache was started with httpd -X # system( "date" ); # print `date`; # works close $out_fh; } #print "Content-type: text/html\n\n"; print "<pre>\n"; print $out_str; print "</pre>\n"; print $ENV{"MOD_PERL"} ."<br>"; print $ENV{"GATEWAY_INTERFACE"} ."<br>"; print $ENV{"SERVER_PROTOCOL"} ."<br>"; </pre> --------------- httpd.conf SetEnv TERM "dumb" PerlSetEnv TERM "dumb" LoadModule perl_module modules/mod_perl.so PerlModule ModPerl::PerlRun <LocationMatch "/test.cgi"> SetHandler perl-script PerlResponseHandler ModPerl::PerlRun Options SymLinksifOwnerMatch ExecCGI </LocationMatch>