Forum Webscript.Ru

Программирование => Perl => Тема начата: metton от 13 Ноября 2003, 02:06:06

Название: CGI::redirect. нужен ли die?
Отправлено: metton от 13 Ноября 2003, 02:06:06
Вопрос, возможно, не самый умный, но всё же. При работе с модулём CGI, а именно, его методом redirect возникла неуверенность: нужно ли заканчивать работу программу её "умерщвлением" (die) или при использовании redirect программа сама прекратит своё выполнение?
Собссно вопрос всплыл по воспоминаниям, что в ПХП, помнится, после Header("Location..."), нужно "умирать"
Название: CGI::redirect. нужен ли die?
Отправлено: NeoNox от 13 Ноября 2003, 11:04:38
Нет не нужно. Perl сам увидит что пора умирать. Но если задать в явном виде это не будет ошибкой.
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 13 Ноября 2003, 11:33:49
2NeoNox
ОК. Спасибо :)
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 20 Ноября 2003, 00:21:18
А вот, оказывается, не всегда Perl знает, что нужно "умереть". Пример:

($params{smth} =~ s/\\s*(.+?)\\s*/$1/)
or $cgi->param(-name=>\'error\', -value=>qq(Blah, blah, blah...)),
$cgi->param(-name=>\'smth1\', -value=>$params{smth1}),
die print redirect(-uri => $refer_url[0].\'?\'.$cgi->query_string());

Без die в последней строчке выполнение программы продолжается, и только после её завершения, осуществляется перенаправдение.
Название: CGI::redirect. нужен ли die?
Отправлено: NeoNox от 20 Ноября 2003, 11:12:53
В данном случае это механизм модуля CGI.
Создание хедера ручками приведет к обратному выводу.
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 20 Ноября 2003, 17:20:01
2NeoNox
Не понял тебя.
Что конкретно в данном случае механизм модуля CGI и на что он влияет?
И что значит, что "Создание хедера ручками приведет к обратному выводу"?
Название: CGI::redirect. нужен ли die?
Отправлено: NeoNox от 20 Ноября 2003, 18:58:18
Цитировать
metton:
Что конкретно в данном случае механизм модуля CGI и на что он влияет?

Я имею ввиду что не смотрел как написан redirect в CGI модуле.
Я не знаю как и когда он хедер отправляет.
Цитировать
metton:
И что значит, что "Создание хедера ручками приведет к обратному выводу"?

print "Location:  http://perl.org/\\r\\n\\r\\n";
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 20 Ноября 2003, 23:24:55
2NeoNox
Я понял, что значит ручками, я не понял что значит "приведет к обратному выводу"
Название: CGI::redirect. нужен ли die?
Отправлено: Chs от 21 Ноября 2003, 09:09:14
Цитировать
я не понял что значит "приведет к обратному выводу"

Редирект пойдет сразу, до завершения скрипта.
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 21 Ноября 2003, 10:39:00
2Chs
Странно, а почему же при редиректе redirect-ом Perl не знает, что надо "умирать"? Может, потому что redirect использует немного другой заголовок: "Status: 302 Moved\\r\\nLocation: http://perl.org/\\r\\n\\r\\n"?
Название: CGI::redirect. нужен ли die?
Отправлено: NeoNox от 21 Ноября 2003, 11:38:55
Это не Perl не знает, а модуль CGI отправляет заголовки и тело тогда когда он считает нужным. Возможно только после того как сформировано все вплоть до end_html. Нужно поднимать документацию или смотреть модуль.
Цитировать
metton:
Может, потому что redirect использует немного другой заголовок: "Status: 302 Moved\\r\\nLocation: http://perl.org/\\r\\n\\r\\n"?

Нет, этот трюк позволяет выставить куки и сделать редирект.
(я написал позволяет а не выставляет). Этот пример в факе по этому форуму лежит.
Название: CGI::redirect. нужен ли die?
Отправлено: metton от 22 Ноября 2003, 12:25:40
2NeoNox
В ФАКЕ ПО ФОРУМУ такого я не нашёл. Либо плохо искал, либо ты имел ввиду не ФАКУ ПО ФОРУМУ, а что-то другое...
Название: CGI::redirect. нужен ли die?
Отправлено: NeoNox от 24 Ноября 2003, 12:17:28
Как выяснилось ФАК по Perl сейчас лежит. Будем стараться поднять его.