Perl私有变量my声明的作用

在Perl程序当中,任何变量都是全局,除非用my来声明

sub fun {

    $a = shift;

    return 1 if $a == 0;

    return fun($a – 1) * $a;

}

这里的$a就是一个全局变量

假如函数调用fun(1),$a赋值为1,进入第二个return

进入fun(0),此时$a变成了0,直接就return 1,所以返回到上一步的return 1 * $a

可是$a是一个全局变量,此时已经被后一次fun的调用置为了0所以最终return 0

所以fun(2),fun(3),fun(4),fun(5)返回的结果全都是0,相信这肯定不是我们想要的结果,为了达到我们本来的想法,每个fun执行的函数体里需要有它自己私有的$a副本,这样就不会相互冲突了,这就是my声明的作用,每次调用fun,都会产生一个新的$a来完成这次执行

发表回复