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

punch_card_don has asked for the wisdom of the Perl Monks concerning the following question:

Mucky Monks,

It's the darndest thing - my script uses the DBI to retrieve some data from a MYSQL database then output it into a Template::Toolkit template. Among other things, these lines are included at the top of the script to give me useful debugging info:

use warnings; # load modules use CGI; use CGI::Carp qw(fatalsToBrowser); use DBI; use Template; use HTML::Entities; # error output BEGIN { use CGI::Carp qw(carpout); carpout(STDOUT); }
And everything runs hunky-dory. Script runs to completion just fine, no error messages output to the browser. So I'm done developing, time to turn off the error messages, so I comment out:
# BEGIN { # use CGI::Carp qw(carpout); # carpout(STDOUT); # }
And it hangs. Just sits there 'til the browser times out. Comment back in, runs just fine again.

What the hey?




Forget that fear of gravity,
Get a little savagery in your life.



UPDATE: Problem Solved

Many thanks to philcrow and ikegami - using their various suggestions, the script now runs just fine with carpout commented out. Here's how I applied their info:

Via telnet, used the "Script" unix command to start script logging into a text file

script debug.txt;
Then ran the perl script successfully by passing all the parameters needed
REMOTE_USER=username perl myscript.pl param_1=x param_2=y param_3=z;
Stop the script logger
exit;
This has the excellent result of outptting everything - error messages and html output - to the debug.txt file for review.

I found a few things, including a sub-routine that was present in two separate places (this script "includes" several others), and a whole whack of lines using undeclared variables in if-statements. Cleaning it all up magically made it run.