| [reply] |
You are absolutely right, it would! (and I didn't think of it... Just wanted to avoid checking that log file)
I guess this is the reason why this kind of
tricks should be use while coding the script, and not
in production...
But I wouldn't want to show such intimate stuff as
warnings to the people who surf my site...
Update 2: When Apache waits too long for a script
and there is still no output, it seems to kill the subprocess...
Then we enter the END block, and the warnings are printed (I guess).
Update:
If you are really concerned about this, you can always fork
a child, and use the pipe to pass it the warnings...
The child will store them in an array or a string, and
pass them back when your end of the pipe closes...
Much heavier, but feasible.
BEGIN {
pipe(READ, WRITE);
*STDERR = *WRITE;
if(!open(DEBUG, "-|") { # child
close WRITE; my @w = <READ>; print @w; exit }
}
END { close WRITE;
print '<hr><b>Script warnings</b>',
'<small><pre>', <DEBUG>, '</pre></small>'
}
(This is untested)
Question: is the END block executed by the child process?
If so, where goes the probable warning about the closed
DEBUG handle? | [reply] [d/l] |
why don't you catch'n display your warnings like this :
$SIG{__WARN__} = sub { print "<HR><B>Warning : </B>$_[0]<HR>"; };
| [reply] [d/l] |
This one is probably the best way to do it. I can save the warnings into a
scalar for later use...
If only I had toroughly read Amelia...
Actually, the only problem really is that it works only with
5.6. (As if my script didn't already use 5.6 specific
stuff already!)
Great, I'll do this and share! Thanks!
| [reply] |
| [reply] |
Another handy module that takes care of this for you (TMTOWTDI) is CGI::Carp. I've used it quite effectively for debugging in the past. I also like merlyn's idea of having them emailed to you -- I do that with my 404 errors, which gets obnoxious when your friends find out about it ;-)
use CGI::Carp qw(FatalsToBrowser);
-marius | [reply] [d/l] |
| [reply] [d/l] |
Good call, chipmunk. I presume you could use carpout() from CGI::Carp to redirect warn/carp/cluck calls to STDOUT.
Additionally as of CGI::Carp v1.20:
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
With this, you can call warningsToBrowser(1) to past warnings to the browser after the call.
Being proven wrong is one of the best reasons to go RTFM, I guess. =]
-marius | [reply] [d/l] |