Perl "my $bar if 0;" 与 "my $bar = undef if 0;"
Perl "my $bar if 0;" vs "my $bar = undef if 0;"
下面的代码会return出错,
$ 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++ }'
没有return错误。这两种形式有什么区别吗?
my
具有 compile-time 效果和 run-time 效果,您不想在没有 [=24= 的情况下使用 my
变量]效果。
由于问题情况是在与声明不同的条件下使用 my
变量,因此您的两个代码段之间没有区别。两者都应避免。
要创建子范围内的持久变量,您可以使用
{
my $bar = 0;
sub foo {
return $bar++;
}
}
或
use feature qw( state ); # 5.10+
sub foo {
state $bar = 0;
return $bar++;
}
下面的代码会return出错,
$ 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++ }'
没有return错误。这两种形式有什么区别吗?
my
具有 compile-time 效果和 run-time 效果,您不想在没有 [=24= 的情况下使用 my
变量]效果。
由于问题情况是在与声明不同的条件下使用 my
变量,因此您的两个代码段之间没有区别。两者都应避免。
要创建子范围内的持久变量,您可以使用
{
my $bar = 0;
sub foo {
return $bar++;
}
}
或
use feature qw( state ); # 5.10+
sub foo {
state $bar = 0;
return $bar++;
}