试图了解范围解析操作符。
$a = 5;
foo();
print "Out a = $a\n";
sub foo() {
local $a = 10;
bar();
}
sub bar() {
print "Inside a = $a\n";
print "Global a = $::a\n";
}
该程序的输出为:
Inside a = 10
Global a = 10
Out a = 5
我本来期望“$ ::一”的价值出来为“5”,而不是10。我以为是什么范围解析运营商做。获取范围值。在这种情况下,没有给出范围,因此具有全局价值。如果有任何调整,请纠正我。
我应该写什么才能获得bar子例程内的'a'全局值?
你是误会::
。Perl实际上并没有全局变量(不包括某些特殊的标识符名称)。它具有包变量。也就是说,每个全局变量都属于一个包。如果你的代码有没有package
说法,即包main
,所以$a
是一样的$main::a
。而之前有没有什么::
是简写main
,因此$::a
也$main::a
。
如果您确实有一个package
声明,则在其范围内使用的包变量将包含在该包中,除非使用限定::
。
local
为包变量,哈希或数组元素提供一个临时值,并保留最里面的作用域时要恢复的先前值。无法在本地范围内访问保存的值。
全局/包变量的相反是词法变量。你总是会希望使用词法变量(以申报my
),不包变量。即使您确实使用了包变量,也几乎不会想要使用来更改它们的值local
。因此,一个良好的情况下使用local
将是真正罕见。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句