Хорошо, что вы используете strict
и warnings
. Цель предупреждений - предупредить вас, когда Perl видит поведение, которое может быть непреднамеренным (и, следовательно, неправильным). Когда вы делаете это намеренно, вполне нормально отключить предупреждение локально. undef
трактуется как 0
в числовом контексте. Если у вас все в порядке с неопределенными значениями и их значением, равным нулю, просто отключите предупреждение:
my $total;
{
no warnings 'uninitialized';
$total = $some_href->{$code}{A} + $some_href->{$code}{B};
}
Примечание. Отключайте только те предупреждения, которые вам нужны, и делайте это в наименьшем объеме.
Если вы не хотите отключать предупреждения, есть и другие варианты. Начиная с Perl 5.10, вы можете использовать оператор //
(определенный-или) для установки значений по умолчанию. До этого люди часто использовали ||
(логическое или), но это может сделать неправильную вещь для значений, которые оцениваются как ложные. Надежный способ установить значения по умолчанию в версиях Perl до 5.10 - это проверить, являются ли они defined
.
$x = $y // 42; # 5.10+
$x = $y || 42; # < 5.10 (fragile)
$x = defined $y ? $y : 42; # < 5.10 (robust)