До прихода в Perl оператора state, который позволяет создавать «статические» переменные прямо внутри подпрограмм, люди пользовались вот таким приемом:
{
my $count = 0;sub next_value {
return ++$count;
}}
print next_value, "\n";
print next_value, "\n";
Теперь все ребята пишут так:
use v5.10;
sub next_value {
state $count = 0;return ++$count;
}say next_value;
say next_value;
До state было: my $x if 0;
sub x {
my $x if 0;
print ++$x, "\n";
}
x() for (1..5);
Современный perl на это выдаёт Deprecated use of my() in false conditional at 1.pl line 7
Да-да, я лишь обнаружил, что показал, в реальном коде.
По-моему, более православно определять классическим способом, за пределами sub { }. А иначе это похоже на использование переменных без предварительного объявления.