以下程序打印" var = 13"和" var = 13".它不应该打印" var = 3"和" var = 13"?
use warnings;
use strict;
package p1;
our $var = 3;
package p2;
our $var = 13;
sub temp
{
package p2;
print "var = $var\n";
}
package p1;
print "var = $var\n"; #This prints var = 13. Why is it picking p2::var as the current package is p1?
&p2::temp;
Run Code Online (Sandbox Code Playgroud)
Cha*_*ens 12
从第一段开始perldoc -f our:
our将简单名称与当前包中的包变量相关联,以便在当前范围内使用.当usestrict 'vars'有效时,我们允许您使用声明的全局变量,而无需在our声明的词法范围内使用包名限定它们.通过这种方式,我们不同于包括use vars作用域.
您的第our一个在当前范围中创建了一个$p1::varnamed 的别名$var.该范围一直运行到文件末尾(package语句不创建新范围).但是你创建了一个新的别名$var($p2::var).因此,别名将持续到范围结束(即文件)或下一次重新定义别名.
如果要限制范围our,请创建新范围:
#!/use/bin/perl
package p1;
use strict;
use warnings;
our $var = 3;
{
package p2;
use strict;
use warnings;
our $var = 13;
}
print "$var in package ", __PACKAGE__, "\n";
{
package p2;
use strict;
use warnings;
our $var;
print "$var in package ", __PACKAGE__, "\n";
}
print "$var in package ", __PACKAGE__, "\n";
Run Code Online (Sandbox Code Playgroud)