ActivePerl не выводит фаталов в браузер - PullRequest
2 голосов
/ 07 февраля 2010

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

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

die "test";

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

Также:

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

<h1>Software error:</h1>
<pre>test at index.pl line 4.

Для получения помощи, пожалуйста, отправьте письмо веб-мастеру этого сайта, сообщив об этом сообщение об ошибке, а также время и дату ошибки.

[Понедельник, 8 февраля 18:29:52 2010] index.pl: тест в строке index.pl 4.

1 Ответ

4 голосов
/ 08 февраля 2010

Попробуйте напечатать пару новых строк перед чем-либо. Это сигнализирует об окончании заголовков HTTP серверу, как говорит 'CGI standard' . Или вы можете использовать что-то вроде этого: (скопировано со справочной страницы 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 .

...