use strict;
нашел бы проблему.
$ perl -e'use strict; my $attribute = "..." and $attribute eq "Y";'
Global symbol "$attribute" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
Объявление my
влияет только на последующие операторы, но не на оператор, в котором находится объявление.(То же самое относится и к объявлениям our
и local
.) Это означает, что $attribute
, который вы создаете с помощью my
и которому назначаете, является переменной, отличной от $attribute
, который вы сравниваете с Y
.Вы хотите
my $attribute = $Data->{'is_new'};
if ($attribute eq 'Y') { ... }
Теперь, если $Data->{is_new}
не существует или не определен, $attribute
будет неопределенным, и сравнение его с Y
выдаст предупреждение.Вы можете избежать этого предупреждения следующим образом:
my $attribute = $Data->{'is_new'};
if (defined($attribute) && $attribute eq 'Y') { ... }
В качестве альтернативы: (5.10 +)
my $attribute = $Data->{'is_new'};
if (($attribute // '') eq 'Y') { ... }