首先建议:使用use strict;编程,基本上就不会出现莫名其妙的问题了。
a函数第一次执行的时候,in_a 引用的是局部变量$x; 以后的执行过程引用的是全局变量$x。
原因如下(个人意见,暂时没有根据 :)):
这个跟in_a定义的位置有关系,第一次执行in_a的时候 in_a既没有声明也没有定义,perl找到in_a定义的时候,让函数in_a中的$x继承了a函数的,之后a的函数末perl正式定义了in_a()使用全局变量$x,因为$x没有限定词。
2009/8/21 zhang jiaqiang <zhangjiaqiang@gmail.com>
大家好,
新手想不太明白一个变量作用的问题,请帮忙看看。
我的问题是如何理解$x后两次没有值,为什么在函数in_a里还有值?而且第三次循环的时候这个值怎么成2了?
简化的程序如下:
for $i (0..2){
a();
}
sub a
{
my $x ;
in_a();
print $i,":\t",$x,"\n";
undef $x;
sub in_a
{
$x++;
print "in_a:$x\n";
}
}
执行结果:
in_a:1
0: 1
in_a:1
1:
in_a:2
2:
Best regards
Zhang JiaQiang
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论