Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Проблема с ошибкой 500 решена !?...


Автор: vechik 18.2.2010, 14:03
Вторую неделю практически изучаю Perl.
Самое неприятное на этом нелегком пути - периодически выскакивающая ошибка 500 или Premature end of script headers.
Она выскочила уже x/0 кол-во раз, причем в самых казалось бы простых участках кода. И никак нельзя понять причину ошибки.
Ну вот сегодня, кажется, я ее победил. 
Надеюсь, начинающим программистам на Perl это будет интересно.

П р и м е р ы   к о д а:
Код

#!/usr/bin/perl -w
use strict;
use CGI qw(:standard);
print header;

open STDERR, ">err.txt";
#Создает файл в той же папке, где запускается программа.
#Используется вместо стандартного журнала ошибок.

#Вывод в браузер:    (о ш и б к а   к о м п и л я ц и и)
eval 'abrakadabra' or print "Error: $@";
# Вывела - Error: Bareword "abrakadabra" not allowed while "strict subs" in use at (eval 1) line 1.

#Вывод в файл:
eval '$a=1;$b=0;$c=$a/$b' or die("Error: $@");
# Вывела - Error: Global symbol "$c" requires explicit package name at (eval 5) line 1.

#о ш и б к а   и н т е р п р е т а ц и и
eval 'my $a=1;my $b=0;my $c=$a/$b';
print "Error: $@";
# Вывела - Error: Illegal division by zero at (eval 5) line 1.

Можно таким же образом вывести системную ошибку и C library - $! или ошибку внешней программы и проч. - $?

Если встретилась ошибка 500, помещаем подозрительный фрагмент кода в eval и смотрим ошибку. 
После устранения всех ошибок, убираем eval. Иногда полезно его оставить, например, если может где-то встретиться деление на 0.

Более подробно по функциям и переменным, связанным с ошибками, см. документацию perlfunc, perlvar…

Это для тех, кто отлаживает программы на стороне сервера.

PS: Не знаю, может CGI::WebOut Дмитрия Котерова и лучше, но я его так и не мог подключить.
Установил модуль в папку /home/.cpan..., но в @INC путь к нему не прописался.
Пробовал добавить вручную, все равно не видит. Но он мне, надеюсь, пока не нужен.

Автор: mvsgt 18.2.2010, 16:43
Для начинающих программистов: никогда не делайте так. Хотя... будете так делать - конкурентов меньше, так что именно так, через задницу, всё и делайте.

Автор: RomanCh 18.2.2010, 22:46
Автор не пытался сперва хотя бы прочитать книжку "Изучаем Perl" перед тем как пытаться что-то сваять методом "кусок урвали отсюда, кусок - оттуда, кажется что-то работает!"? Мне кажется что нет. Советую почитать! Как и всем начинающим.

Автор: dva300 3.3.2010, 09:21
да блин... а потом весь этот рак надо переписывать....
автору респект  smile  учите матчасть.

P.S. боюсь даже представить что будет на ТРЕТЬЮ неделю  smile  smile ждемс...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)