Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Трудности с IndigoPerl, ... или может быть с Perl вообще ) 
:(
    Опции темы
VladimirAlexeev
Дата 24.1.2009, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Установил IndigoPerl.
Создаю файл следующего содержания
Код

#!perl -w
print "My test!";

Запускаю через браузер, ничего не выводится.
Беру пример
Код

#!perl -w
#use CGI::Carp 'fatalsToBrowser';     # Необходимы
use warnings;                                  # для отладки
#use strict;                                         # скриптов
use CGI;
my $q = new CGI;
print $q->header(-type => 'text/html', -charset => 'windows-1251' ), $q->start_html( "Мой PERL!" );
print "My test!";
print $q->end_html;

Выводиться на экран My test.
Вопрос №1
Что обязетально нужно выводить шапку через CGI объект (или просто выводить еще-что, кроме нужной мне информации), чтобы увидеть хоть какой-то результат?
Вопрос №2
При допущении любой ошибки в скрипте, браузер выдает Ошибку 500. При этом само диагностическое сообщение записывается в error.log апача.
Так вот можно ли как сделать вывод ошибок в браузер (как в PHP)?

Это сообщение отредактировал(а) VladimirAlexeev - 24.1.2009, 19:36
PM MAIL   Вверх
nitr
Дата 24.1.2009, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(VladimirAlexeev @  24.1.2009,  19:34 Найти цитируемый пост)
Вопрос №1
Что обязетально нужно выводить шапку через CGI объект (или просто выводить еще-что, кроме нужной мне информации), чтобы увидеть хоть какой-то результат?

возьмите, пожалуйста, книгу и прочтите про CGI (вы удивитесь, что это не Perl ;) ), и почему обязательно "выводить ещё-что, кроме нужной вам информации"! Или может погуглить, это совсем обширный вопрос и писать (а скорее всего просто пересказывать) очень много, например, можете воспользоваться википедией.

Цитата(VladimirAlexeev @  24.1.2009,  19:34 Найти цитируемый пост)
Вопрос №2
При допущении любой ошибки в скрипте, браузер выдает Ошибку 500. При этом само диагностическое сообщение записывается в error.log апача.Так вот можно ли как сделать вывод ошибок в браузер (как в PHP)?

А в php есть обработка ошибки 500? Она возникает в тех случаях, когда в приципе ошибка или с запуском скрипта, или ещё какие-то, но поэтому и не может скрипт обработать, ошибка до скрипта.
В частных случаях как раз и используют:
use CGI::Carp 'fatalsToBrowser';
например, допустим ошибку в вашем скрипте:
Код
#!perl
use CGI::Carp 'fatalsToBrowser';     # Необходимы
use warnings;                                  # для отладки
use strict;                                         # скриптов
use CGI;

$q = new CGI; #если не заметили убрал my
print $q->header(-type => 'text/html', -charset => 'windows-1251' ), $q->start_html( "Мой PERL!" );
print "My test!";


P.S.: -w и use warnings; практически одно и тоже, но считается что использование последнего рекомендовано (сейчас).
И вот про то что такое Ошибка 500 (эту ошибку в пхп вы тоже будете смотреть в логах Апачи) гугль вывел:
http://dualhost.ru/faq/help_403.php
http://www.yutex.ru/help_error.php#500


--------------------
PM   Вверх
VladimirAlexeev
Дата 24.1.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Цитата(nitr @  24.1.2009,  22:00 Найти цитируемый пост)
А в php есть обработка ошибки 500? Она возникает в тех случаях, когда в приципе ошибка или с запуском скрипта, или ещё какие-то, но поэтому и не может скрипт обработать, ошибка до скрипта.

Но если, допустим, поставлю квадратные скобки, там где должны быть круглые, то мне В БРАУЗЕР выведется сообщение. А не в лог! И никакой ошибки 500.
А тут малейшая опечатка  и все! 500 и лезь в лог (

Ладно, качаю ща мануал, может просветит...
PM MAIL   Вверх
nitr
Дата 25.1.2009, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



VladimirAlexeev, вы не правы!
В пхп нет обработки 500 ошибки, то что вы про скобки э то синтаксис, зачем спорить ни о чём? Вы посмотрели сылки, там же по-русски написано - Ошибка 500 это "ошибка сервера".
use CGI::Carp 'fatalsToBrowser'; вам в первое время поможет. Посмотрите пример что я привел. В нём мы тоже поставили "какие-то другие скобки", а конкретнее убрали две буквы "m" и "y" smile . 

Чтобы получить 500 ошибку в пхп, как вариант - найдите и удалите php.ini. Ещё можно изменить права на исполнение на скрипт.php. и придется вам тоже лезть в логи Апача. И ничего он не выведет вам, а скажет 500.


P.S.: VladimirAlexeev, хватит сравнивать PHP и Perl, вы так точно не научитесь Perl'у, в принципе обратное тоже иногда закономерно ;) Прочтите пару книг, это для первого времени достаточно, да и самое главное не ленитесь понимать, а знание пхп отбросьте на время изучения.


Вот пример проще:
Код
#!perl
use CGI::Carp 'fatalsToBrowser';
use warnings;
use strict;

print $test;

Ошибку покажет в браузере, можно сказать синтаксическая ошибка.
Такое:
Код
#!perl
use CGI::Carp 'fatalsToBrowser';
use warnings;
use strict;

print 'My test';

Уже покажет 500. Т.к. синтаксис верный, но у вас не скрипт CGI. Если бы вы знали что это CGI, то поняли, что здесь мы не передали заголовок.
Т.е. этот:
Код
#!perl
use CGI::Carp 'fatalsToBrowser';
use warnings;
use strict;

print "Content-type: text/html\n\n";
print 'My test';


Это сообщение отредактировал(а) nitr - 25.1.2009, 01:01


--------------------
PM   Вверх
tolkien
Дата 25.1.2009, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



И еще учтите что PHP создан спец. для веба, а PERL создан для администраторов сетей. Отсюда такое разное поведение на ошибку 500 как выше написано.Т.е в php предусмотренные разные спец обработки не предвиденных ситуаций, чтобы пользователь поличл максимально полезной информации на устранение ошибки. В PERL для этого вам надо самим что то делать. Например подключать разные модули или  что-нибудь предопределять. Работы от вас в PERL требуется больше. Например чтобы производительность вашего скрипта была сравнима с php нужно обязательно использовать mod_perl или fastcgi. Т.е вам придется дополнительно изучать выше указанные модули и их интерфейсы. Кроме того не каждый хост даст еще возможность использовать mod_perl или fastcgi. В PHP ничего этого не надо. Он сделан уже так что вам ненужно заниматься самим кроме написания самой программы еще и ее оптимизацией.
 
PM MAIL   Вверх
VladimirAlexeev
Дата 25.1.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Блин, да знаю я ошибки сервера =). Потому меня это напрягает (удивляет).
Цитата(nitr @  25.1.2009,  00:53 Найти цитируемый пост)
Вот пример проще:
...
Ошибку покажет в браузере, можно сказать синтаксическая ошибка.

Выдает ошибку 500!
Цитата(nitr @  25.1.2009,  00:53 Найти цитируемый пост)
Уже покажет 500. Т.к. синтаксис верный, но у вас не скрипт CGI. Если бы вы знали что это CGI, то поняли, что здесь мы не передали заголовок.

Это выдает пустую страницу.
Цитата(nitr @  25.1.2009,  00:53 Найти цитируемый пост)
Т.е. этот:

Выдает уже My test.

Вот все, что касается последних 3 примеров в логе
Цитата

[Sun Jan 25 11:29:35 2009] [error] Global symbol "$test" requires explicit package name at D:/WWW/PERL/test2.pl line 6.\n
[Sun Jan 25 11:31:37 2009] [error] [client 127.0.0.1] malformed header from script. Bad header=My test: test2.pl
[Sun Jan 25 11:31:37 2009] [warn] /test2.pl did not send an HTTP header
[Sun Jan 25 11:31:39 2009] [error] [client 127.0.0.1] malformed header from script. Bad header=My test: test2.pl
[Sun Jan 25 11:31:39 2009] [warn] /test2.pl did not send an HTTP header


Это сообщение отредактировал(а) VladimirAlexeev - 25.1.2009, 11:39
PM MAIL   Вверх
gcc
Дата 25.1.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



браузер может быдавть ошибку из-за прав доступа... и еще видел из-за некоторых приколов

Добавлено через 3 минуты и 28 секунд
Цитата(VladimirAlexeev @ 25.1.2009,  11:36)

Выдает уже My test.


работает?
PM WWW ICQ Skype GTalk Jabber   Вверх
nitr
Дата 25.1.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



VladimirAlexeev, смотрите у себя, у вас проблемы. Данные примеры слишком просты, чтобы так отрабатывать, в вашем случае вы скорее всего закомментировали строку use CGI::Carp 'fatalsToBrowser';.

На сколько я знаю IndigoPerl это Винда. Ставьте Perl от ActiveState и ошибок меньше, и реализация лучше (имхо).


--------------------
PM   Вверх
VladimirAlexeev
Дата 25.1.2009, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Цитата(gcc @  25.1.2009,  12:00 Найти цитируемый пост)
работает? 

Третий вариант - да.
Но первые два то не так, как описали )

Цитата(nitr @  25.1.2009,  12:25 Найти цитируемый пост)
в вашем случае вы скорее всего закомментировали строку use CGI::Carp 'fatalsToBrowser';.

Как в посте написали, так и вставил в скрипт и запустил.

Цитата(nitr @  25.1.2009,  12:25 Найти цитируемый пост)
На сколько я знаю IndigoPerl это Винда. Ставьте Perl от ActiveState и ошибок меньше, и реализация лучше (имхо). 

Не понял?
IndigoPerl - это Apache+PHP+Perl. Сразу все ставится вместе.
По крайней мере папки ActivePerl там есть =)
PM MAIL   Вверх
nitr
Дата 25.1.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



VladimirAlexeev, покажите perl -v.
А затем perl -MCGI::Carp -e "use CGI::Carp 'fatalsToBrowser'; print '\';"


--------------------
PM   Вверх
VladimirAlexeev
Дата 25.1.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Цитата

>perl -v
This is perl, v5.10.0 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
...


Цитата

>perl -MCGI::Carp -e "use CGI::Carp 'fatalsToBrowser'; print '\';"
Content-type: text/html

<h1>Software error:</h1>
<pre>Can't find string terminator &quot;'&quot; anywhere before EOF at -e line 1.</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>
[Sun Jan 25 16:50:47 2009] -e: Can't find string terminator "'" anywhere before EOF at -e line 1.


Это сообщение отредактировал(а) VladimirAlexeev - 25.1.2009, 17:00
PM MAIL   Вверх
nitr
Дата 25.1.2009, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



VladimirAlexeev, создайте скрипт
Код
#!perl
use CGI::Carp 'fatalsToBrowser';
print '\';



--------------------
PM   Вверх
VladimirAlexeev
Дата 25.1.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



Создал, попытался запустить через браузер, получил ошибку 500.
PM MAIL   Вверх
gcc
Дата 25.1.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



nitr, мложет быть так?

Код

#!С:\perl.exe

PM WWW ICQ Skype GTalk Jabber   Вверх
VladimirAlexeev
Дата 25.1.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 24.9.2008
Где: г. Волжский

Репутация: нет
Всего: нет



gcc, не знаю это ли Вы имеете ввиду, но perl в командной строке у меня выполняется в любом месте.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0606 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.