Forum Webscript.Ru
Программирование => Perl => Тема начата: metton от 13 Ноября 2003, 02:06:06
-
Вопрос, возможно, не самый умный, но всё же. При работе с модулём CGI, а именно, его методом redirect возникла неуверенность: нужно ли заканчивать работу программу её "умерщвлением" (die) или при использовании redirect программа сама прекратит своё выполнение?
Собссно вопрос всплыл по воспоминаниям, что в ПХП, помнится, после Header("Location..."), нужно "умирать"
-
Нет не нужно. Perl сам увидит что пора умирать. Но если задать в явном виде это не будет ошибкой.
-
2NeoNox
ОК. Спасибо :)
-
А вот, оказывается, не всегда 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.
Создание хедера ручками приведет к обратному выводу.
-
2NeoNox
Не понял тебя.
Что конкретно в данном случае механизм модуля CGI и на что он влияет?
И что значит, что "Создание хедера ручками приведет к обратному выводу"?
-
metton:
Что конкретно в данном случае механизм модуля CGI и на что он влияет?
Я имею ввиду что не смотрел как написан redirect в CGI модуле.
Я не знаю как и когда он хедер отправляет.
metton:
И что значит, что "Создание хедера ручками приведет к обратному выводу"?
print "Location: http://perl.org/\\r\\n\\r\\n";
-
2NeoNox
Я понял, что значит ручками, я не понял что значит "приведет к обратному выводу"
-
я не понял что значит "приведет к обратному выводу"
Редирект пойдет сразу, до завершения скрипта.
-
2Chs
Странно, а почему же при редиректе redirect-ом Perl не знает, что надо "умирать"? Может, потому что redirect использует немного другой заголовок: "Status: 302 Moved\\r\\nLocation: http://perl.org/\\r\\n\\r\\n"?
-
Это не Perl не знает, а модуль CGI отправляет заголовки и тело тогда когда он считает нужным. Возможно только после того как сформировано все вплоть до end_html. Нужно поднимать документацию или смотреть модуль.
metton:
Может, потому что redirect использует немного другой заголовок: "Status: 302 Moved\\r\\nLocation: http://perl.org/\\r\\n\\r\\n"?
Нет, этот трюк позволяет выставить куки и сделать редирект.
(я написал позволяет а не выставляет). Этот пример в факе по этому форуму лежит.
-
2NeoNox
В ФАКЕ ПО ФОРУМУ такого я не нашёл. Либо плохо искал, либо ты имел ввиду не ФАКУ ПО ФОРУМУ, а что-то другое...
-
Как выяснилось ФАК по Perl сейчас лежит. Будем стараться поднять его.