ActivePerl не выводит фаталов в браузер

Я использую следующий код для проверки вывода фатальных ошибок в браузер:

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

die "test";

Я ожидаю увидеть какую-то ошибку в браузере, но ее нет, я просто получаю 500 регулярных ответов. Я забыл, что у меня были пользовательские страницы ошибок для удаленных запросов, и теперь я получаю Script failed to send data.,

Также:

> perl -w index.pl
Status: 500
Content-type: text/html

<h1>Software error:</h1>
<pre>test at index.pl line 4.</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.

</p>
[Mon Feb  8 18:29:52 2010] index.pl: test at index.pl line 4.

1 ответ

Решение

Попробуйте напечатать пару новых строк, прежде чем что-либо. Это говорит об окончании HTTP-заголовков для сервера, как говорится в "стандарте CGI". Или вы можете использовать что-то вроде этого: (скопировано со страницы руководства Carp):

use CGI::Carp qw(set_die_handler);
BEGIN {
   sub handle_errors {
      my $msg = shift;
      print "content-type: text/html\n\n";
      print "<h1>Oh gosh</h1>";
      print "<p>Got an error: $msg</p>";
  }
  set_die_handler(\&handle_errors);
}

Если это не сработает, вот еще несколько хитростей:

#!perl
BEGIN { $| = 1; print "\n\n" }
open STDERR, ">&STDOUT";

И еще несколько хитростей в этой статье в Perl Journal.

Другие вопросы по тегам