Я не понимаю, почему следующее:Почему оценка короткого замыкания Perl приводит к проверке rvalue?
my $err = undef;
while(1){
if($err && ($err->code == 502)) {
[...]
}
[...]
eval {...}
$err = [email protected];
}
результаты в Can't call method "code" on an undefined value at ./filename.pl line 74.
в PERL v5.8.8. Другими словами: почему perl выполняет второе логическое выражение, даже если конструктор OP1 && OP2
не может стать истинным, потому что первый операнд имеет значение false (undef).
даже более подробный вариант if((defined $err) && ($err->code == 502))
дает тот же результат.
Заранее спасибо :)
Я не могу воспроизвести это (на 5.10, правда). Можете ли вы дать небольшую, но полную программу, которая демонстрирует проблему? – ruakh
Мой комментарий содержит полный скрипт Perl. Я не знаю, как это сделать в этом столбце комментариев, поэтому позвольте мне опубликовать его как ответ ниже. – thb
извините, но программа использует Net :: Twitter (довольно много deos), и при использовании сокращенного фрагмента кода это действительно правильно ... пожалуйста, будьте терпеливы, я попробую найти образец – Julian