Почему Perl сообщает неверный номер строки для этого предупреждения относительно неинициализированного значения, используемого в эльсиф?

Я получаю странное предупреждение об использовании кода Perl, и я надеюсь, что SO-brain может помочь.

Речь идет о коде:

sub add_observation {
    my $self = shift;
    my $observation = shift;

    my $result = $observation->get_datum_result($self->{datum_name});
    if(!(defined $result)) {
        croak("Datum '$self->{datum_name}' not defined for this observation: ". Dumper($observation));
    }
    $self->{result} |= $result;
    my $observation_time = $observation->get_time();

    if($self->{result} == 0){
        $self->set_start_time($observation_time);
    }
    if($result != 0) {
        $self->set_end_time($observation_time);
        $self->{end_threshold} = $observation_time->epoch() + $self->{timeout};
    }
    elsif($observation_time->epoch() > $self->{end_threshold}) {
        $self->{complete} = 1;
    }

    return $self->{result}; 
}

Когда я запускаю свой код, я получите следующее предупреждение:

Use of uninitialized value in numeric gt (>) at Performance/BadSpan.pm line 67 (#1)

Строка 67 соответствует строке if ($ result! = 0) {.

Моя проблема двоякая:

  1. Почему Perl утверждает, что $ result не определен, когда ему предшествует некоторый защитный код, который гарантирует, что он определен
  2. Почему Perl жалуется на числовой gt, когда числового gt нет. что быстрее для основных операций, таких как итерация, индексирование, запросы и другие. который ...

    Я пытаюсь понять разницу между интерфейсами IQueryable, ICollection, IList и IDictionary что быстрее для основных операций, таких как итерация, индексирование, запросы и т. д.

    какой класс, например Collection, List, Dictionary и т. д., будет хорошо запускать с этими интерфейсами и когда мы должны использовать этот класс. Основные преимущества использования этих классов перед другими.

    Я пробовал читать другие сообщения с похожими вопросами, но ничего не ответил на мои вопросы. Спасибо за помощь.

49
задан RBT 25 April 2017 в 16:44
поделиться