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.