Error Logs and STDERR
Normally, error messages are sent to the terminal screen ( STDERR ) when something goes wrong in a Perl script, but when launched by a server as a CGI script, the errors are not sent to the screen, but to the server's error log file. In the browser you may see "Empty Document" or "Internal Server Error," which tells you nothing about what went wrong in the program.
Always check your syntax at the shell command line with the -c switch before handing the script to the server. Otherwise, you will not see your error messages unless you check the log files. Check the syntax of your Perl scripts with the -c switch.
(At the Command line) 1 perl -c perlscript 2 perlscript syntax OK
(Perl syntax errors shown in the Apache server's error log) [Mon Jul 20 10:44:04 1998] access to /opt/apache_1.2b8/ cgi-bin/submit-form failed for susan, reason: Premature end of script headers [Mon Sep 14 11:11:32 1998] httpd: caught SIGTERM, shutting down [Fri Sep 25 16:13:11 1998] Server configured -- resuming normal operations 1 Bare word found where operator expected at welcome.pl line 21, near "/font></TABLE" (Missing operator before TABLE?) 2 syntax error at welcome.pl line 21, near "<TH><" syntax error at welcome.pl line 24, near "else" [Fri Sep 25 16:16:18 1998] access to /opt/apache_1.2b8/ cgi-bin/visit_count.pl failed for susan, reason: Premature end of script headers
Access Logs and Status Codes
Check your server's access log to see what status codes were sent by your server after a transaction was complete.  The following example consists of excerpts taken from the Apache server's access log. This log reports information about a request handled by the server and the status code generated as a result of the request.
Table C.6. HTTP status codes.
(Status codes from the Apache server's access log) 1 susan - - [08/Oct./1999:10:45:36 -0700] "GET /cog-bin/visit_count.pl HTTP/1.0" 500 388 2 susan - - [08/Oct./1999:10:45:59 -0700] "GET /cgi-bin/visit_count.pl HTTP/1.0" 200 426