问题描述
$ perl -E'sub foo { my $bar if 0; $bar++ }'
This use of my() in false conditional is no longer allowed at -e line 1.
但是此代码
$ perl -E'sub foo { my $bar = undef if 0; $bar++ }'
不返回错误。这两种形式之间有什么区别吗?
解决方法
my
具有编译时效果和运行时效果,并且您不希望先使用运行时效果的my
变量。
由于有问题的情况是在与声明不同的条件下使用my
变量,因此您的两个摘要之间没有区别。两者都应避免。
要创建范围为子范围的持久变量,可以使用
{
my $bar = 0;
sub foo {
return $bar++;
}
}
或
use feature qw( state ); # 5.10+
sub foo {
state $bar = 0;
return $bar++;
}