以下程序会打印“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;
答案 0 :(得分:12)
从perldoc -f our
的第一段开始:
our
将一个简单名称与当前包中的包变量相关联,以便在当前范围内使用。当使用strict 'vars'
生效时,我们允许您使用声明的全局 在our
声明的词法范围内,没有用包名限定它们的变量。通过这种方式,我们与use vars
不同,后者是包作用域。
您的第一个our
在当前范围内创建名为$p1::var
的{{1}}别名。该范围一直运行到文件末尾($var
语句不创建新范围)。但随后您为package
($var
)创建了一个新别名。因此别名会持续到范围结束(即文件)或下一次重新定义别名。
如果您想限制$p2::var
的范围,请创建一个新范围:
our