Я ожидаю, что блок во втором операторе if будет введен из-за значения undef, но журналы показывают, что он не вводится.
sub getcmd{
my $self = $_[0];
if ( $self->_recv == OK ){
push @{$self->{'log'}}, ['NOTICE', "OK"];
return "My command";
}
push @{$self->{'log'}}, ['ERROR', "Did not get OK back"];
return undef;
}
...
if (!($ret = $self->getcmd)){
push @{$self->{'log'}}, ['ERROR', "failed to read after asking for NEXT"];
}
else {
push @{$self->{'log'}}, ['ERROR', "'undef' not detected in next()"];
}
Файл журнала показывает:
[Fri May 8 19:25:56 2009]: ERROR: Did not get OK back
[Fri May 8 19:26:02 2009]: ERROR: 'undef' not detected in next()
Любые идеи с благодарностью принимаются.
Редактировать. Извините, я отредактировал код, чтобы показать основной процесс. Я должен был вычитать это немного лучше.
- Я добавил $ret в getcmd(), чтобы имитировать то, что происходит в функции ведения журнала, которая просто выводит текущее значение $ret, которое является глобальной переменной, всегда используемой для захвата возвращаемых значений.
- Я обрезал сообщения журнала и пропустил лишнее «назад».
Спасибо за предложения и комментарии. Я не заметил шестисекундной разницы в отметках времени журнала, поэтому теперь я подозреваю, что вы правы в том, что последовательность выполнения отличается от того, что я изначально ожидал.
Я вернусь и посмотрю еще раз. Думаю, это то, что вы получаете, когда пытаетесь взглянуть на чей-то «средний» Perl после тринадцатичасового рабочего дня, пытаясь закончить что-то для проекта, который «должен быть запущен в понедельник»!
Я не писал код, а просто унаследовал его. Код был написан парой человек, которые думают, что им не нужны «вонючие предупреждения или ограничения».
Представьте себе 800 строк Perl и множество «если», но никаких других утверждений! Никакого защитного кодирования! 8-О
Еще раз спасибо за вашу помощь.
ваше здоровье,