这是第一个例子:
$g=5;
sub A {
my $x=2; # $x uses static scoping
local $y=3; # $y uses dynamic soping
local $g=7;
print "In A: g=$g, x=$x, y=$y\n";
B();
}
sub B {
print "In B: g=$g, x=$x, y=$y\n";
C();
}
sub C {
print "In B: g=$g, x=$x, y=$y\n";
}
A();
print "In main: g=$g, x=$x, y=$y\n";
这是第一个示例的输出:
In A: g=7, x=2, y=3
In B: g=7, x=, y=3
In B: g=7, x=, y=3
In main: g=5, x=, y=
这是第二个例子:
sub big {
my $var=1;
sub sub1 () {
print " In sub1 var=$var\n";
}
sub sub2 () {
$var = 2;
print "In sub2, var is $var\n";
sub1();
}
sub1();
sub2();
sub1();
}
big();
这是第二个输出:
In sub1 var=1
In sub2, var is 2
In sub1 var=2
In sub1 var=2
问题是:为什么在第二个示例sub B
中sub C
可以访问,my $x=2;
而在第一个示例 sub1()
中却sub2()
不能访问,my $var=1;
我相信my
用于静态范围$x
,在示例 2 的静态范围内也没有任何其他内容sub big
,我预计在第二个例子,像这样:In sub1 var=
。在第二个例子中,can sub1
and sub2
can access to $x
alough it has been declaration with word my
,为什么它的行为不像第一个例子?