Используете ли вы обработчик ошибок во время отладки?
die
операторы и другие фатальные ошибки времени выполнения и времени компиляции печатаются на STDERR
, которые трудно найти и могут быть объединены с сообщениями с других веб-страниц вашего сайта. Хотя вы отлаживаете свой сценарий, неплохо было бы получить сообщения о фатальных ошибках для отображения в вашем браузере.
Один из способов сделать это - вызвать
use CGI::Carp qw(fatalsToBrowser);
в верхней части вашего скрипта. Этот вызов установит обработчик $SIG{__DIE__}
(см. perlvar ) отображает фатальные ошибки в вашем браузере, добавляя при необходимости допустимый заголовок. Другой трюк отладки CGI, который я использовал до того, как я когда-либо слышал о CGI::Carp
, состоял в том, чтобы использовать eval
с возможностями DATA
и __END__
в скрипте для обнаружения ошибок времени компиляции:
#!/usr/bin/perl
eval join'', ;
if ($@) { print "Content-type: text/plain:\n\nError in the script:\n$@\n; }
__DATA__
# ... actual CGI script starts here
Этот более подробный метод имеет небольшое преимущество перед CGI::Carp
в том, что он будет ловить больше ошибок времени компиляции.
Обновление: я никогда не использовал его, но он выглядит как CGI::Debug
, как предложил Mikael S, также является очень полезным и настраиваемым инструментом для этой цели.