Поведение my $x if 0
является ошибкой. Он выжил в течение длительного времени, потому что он полезен и, следовательно, используется; исправление этого сломало бы существующий код. Он совместим и поэтому может считаться пригодным для использования, но это не значит, что вы должны это делать. Эта «функция» устарела и с 5.10 выдает предупреждение:
Deprecated use of my() in false conditional
Даже если вы не можете использовать state
(т. Е. Ваш код должен работать под версиями Perl до 5.10), уловка my $x if 0
- просто лень. В противном случае используйте закрытие:
{
my $x;
sub counter {
$x = '1' unless defined $x;
print $x++, "\n";
}
}