在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来完成这次执行