如何解决Perl“如果$ 0,我的$ bar;” vs“我的$ bar = undef如果为0;”
$ 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++;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。