Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: use CGI::Carp qw(fatalsToBrowser);

by Trimbach (Curate)
on Apr 09, 2003 at 13:39 UTC ( #249211=note: print w/replies, xml ) Need Help??


in reply to use CGI::Carp qw(fatalsToBrowser);

If your CGI has a syntax error (and that's what it looks like from the error log) then that means your program has a compile-time error. CGI::Carp only catches run-time errors that occur after the use CGI::Carp code has been compiled; syntax errors occur before that and will still be reported to the Apache error log.

If you have telnet access to your webserver type "perl -c your-cgi-here.pl" to check for compilation errors. Once that's ok you can finish your debugging from a web browser.

Gary Blackburn
Trained Killer

Edited: Thanks tye for the clarification. :-)

Replies are listed 'Best First'.
Re^2: use CGI::Carp qw(fatalsToBrowser); (is compile-time)
by tye (Sage) on Apr 09, 2003 at 16:09 UTC

    No, use is a compile-time directive and so even compile-time errors will be caught. But errors from lines of code that get compiled before the use CGI::Carp line of code gets compiled cannot be caught.

                    - tye
      Well, that's interesting. You're absolutely correct, but it seems odd to me that anything would get compiled before the use CGI::Carp is compiled, except maybe other use declarations or the contents of BEGIN blocks, since use is automatically placed in an implicit BEGIN block.

      A little experimentation reveals that perl throws syntax errors even before compilation really begins (or, at least before BEGIN blocks. This is implied in the Camel, where it says that "the Perl compiler reads through your entire program source before execution start." I guess when they say that BEGIN blocks execute as soon as possible they mean AFTER a syntax check, 'cause before that, it isn't possible. :-)

      I guess this makes sense... if perl can't parse the program it has to give up without executing anything... but it does make catching syntax errors in a CGI environment (no error-log, FTP only) problematic. I guess the alternative is to install Perl on your local machine and do all your syntax checks locally.

      Gary Blackburn
      Trained Killer

        A little experimentation reveals that perl throws syntax errors even before compilation really begins (or, at least before BEGIN blocks

        No. You show me your experiement and I'll show you mine. ;) Heck, I'll show you mine anyway:

        BEGIN { warn "Compiled first line of script"; } ....
        gives
        Compiled first line of script at - line 1. syntax error at - line 2, near "..."
        or
        use CGI::Carp qw( fatalsToBrowser ); ....
        gives
        Content-type: text/html <H1>Software error:</H1> <CODE>syntax error at - line 2, near &quot;...&quot; Execution of - aborted due to compilation errors. </C0DE> <P> For help, please send mail to this site's webmaster, giving this error + message and the time and date of the error. [Wed Apr 9 11:36:09 2003] -: syntax error at - line 2, near "..." [Wed Apr 9 11:36:09 2003] -: Execution of - aborted due to compilatio +n errors.

        Syntax errors in code that appears before the use CGI::Carp line will not be caught. For many CGI scripts, this boils down to just the #! line. But as pointed out elsewhere in this thread, CGI::Application was being used and the CGI::Carp was being used in the wrong place for it to take affect soon enough.

        Perl code is compiled one-statement-at-a-time and so-called "compile-time" constructs get executed right after the statment they are contained in has been compiled. So there is no single "compile time" nor a single "run time". So each statement has one compile time and zero or more run times.

        Things like BEGIN and use cause statements' run times to happen sooner while things like eval cause statements' compile times to happen later.

                        - tye

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://249211]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2021-10-26 22:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My first memorable Perl project was:







    Results (91 votes). Check out past polls.

    Notices?