Forum Webscript.Ru
Программирование => Perl => Тема начата: metton от 23 Августа 2003, 03:43:20
-
странность с хедером...
Почему такой код не выдаёт ошибки 500?!
#!/usr/bin/perl -w
use strict;
print qq{
Content-Type: text/html};
Он просто выводит Content-Type: text/html
Кто же посылает хедер?
А вот если оператор print переписать так:
print qq{Content-Type: text/html};
то выводится долгожданное (:)) сообщение об ошибке...
...и ещё...
Что возвращает cookie() (модуля CGI) если ей передать значение substr($str,0,-1) при том что $str - не опеределено (undef).
Вот пример.
print substr(undef,0,-1);
print cookie(substr(undef,0,-1));
Почему если использовать только первую строку - выдаётся только предупреждение, а если вторую - ошибка Modification of a read-only value attempted at e:\\my_soft\\perl\\cgi\\cgi-bin\\LIST18~3.CGI line 52.
ЗЫ: никакой практической ценности этот пример не несёт - просто получилось так, что то, что передавалось substr было undef и я долго не мог понять то, что я и спрашиваю...
-
Ответьте кто-нибудь, плз.
-
print "Content-Type: text/plain\\n\\n";
print "test"
-
2arto
И что??!
Ты вопрос внимательно читал?
-
metton:
Почему такой код не выдаёт ошибки 500?!
Если посудить логически, то получается, что в первом случае реальный content-type как бы задан и равен undef, поле его вывода, как надо идет пусктая строка. И вывод далее Content-Type:... считается обычной строкой... А во втором выводе нет пустой строки после явно заданного заголовка.
Что возвращает cookie()
Наверно правильнее было бы написать:
print substr(cookie(\'cookname\'),0,-1); #cookie(\'cookname\') = undef
-
2Wyclef
Да. Со 2-ым вариантом стормозил. НО КТО ВЫВОДИТ ХЕДЕР В ПЕРВОМ??!!
Насчёт куков - именно так как я сказал. Просто было нужно обрезать строку и передать её как имя cookie()-у.
Вопрос чисто теоретический... Просто интересно.
-
perl за тебя. он иногда исправляет неряшливых программистов.
только нельзя на это пологаться.
или есть какие еще мнения?
-
NeoNox:
или есть какие еще мнения?
Аналогично - веб-сервер, но полагаться на это по-прежнему нельзя.
-
metton:
Так как у тебя написано - будет ошибка, а если имя куки в переменной - будет аналогичный варнинг...
[b]perldoc perltrap[/b]:
(Constants)
perl 4 lets you modify constants:
$foo = "x";
&mod($foo);
for ($x = 0; $x < 3; $x++) {
&mod("a");
}
sub mod {
print "before: $_[0]";
$_[0] = "m";
print " after: $_[0]\\n";
}
# [b]perl4[/b]:
# before: x after: m
# before: a after: m
# before: m after: m
# before: m after: m
# [b]Perl5[/b]:
# before: x after: m
# Modification of a read-only value attempted at foo.pl line 12.
# before: a
-
2Wyclef
Про куки:
Я просто не могу понять, ЧТО пытается модифицировать это read-only value?
Про хедеры:
И всё-таки ЧТО в данном случае выводит хедеры?
Т.е. почему именно в данной конструкции:
print qq{
Content-Type: text/html};
допускаются поблажки?
Может, это какое-то свойство оператора qq?
-
metton
Perl ругается при попытке обрезать undef, ИМХО...
-
2Wyclef
Так почему же он ругается только если обрезать внутри куки?
Если же отвдельно(первая строка), то не ругается же.
-
perldoc perldiag:
Modification of a read‐only value attempted
(F) You tried, directly or indirectly, to change the value of a
constant.
Да потому что это уже сформированый обьект.
-
2NeoNox
Не понял. Можешь пояснить (насчёт объекта)?