- 论坛徽章:
- 0
|
我用的是Apache+perl 做的web管理系统,现在碰到几个让我迷惑的事情。
我要在一个pl文件,或者说是那种包内部申明一个私用的包内全局变量。
我举个例子,只是示意,PrintToPage函数是个假定输出到HTML页面上显示的函数。
#!/usr/bin/perl -w
my $a=1;
PrintToPage "初始:",$a;
changea();
PrintToPage "结束:",$a;
sub changea
{
PrintToPage "函数内:",$a;
$a=2;
}
预期结果应该是打印出
初始:1
函数内:1
结束:2
我在IE里访问该pl文件,第一次执行后,得到了预期结果,可当我再次执行这个pl时,却得到了
初始:1
函数内:2
结束:1
在以后的执行里也将一直得到这个结果,似乎是changea()这个函数在执行过一次后,自己内部申明保存了$a这个变量,这是怎么回事啊?
然后我把申明中的 my $a 替换成了 our $a, 却出现了另外的问题
用our申明的变量,在第二次执行时会记忆住第一次执行完时该变量保存的值。
例如
#!/usr/bin/perl -w
our $a;
PrintToPage "初始:",$a;
$a=2;
PrintToPage "结束:",$a;
当我们第二次访问该pl文件时会输出
初始:2
结束:2
实际上初始值并没有定义。请问这个如何解释?
后来我们采用了local our的定义方式,这两个问题都得到了解决,可是我不太清楚,local our定义的变量算是怎么回事。
[ 本帖最后由 neil_young 于 2005-11-23 10:40 编辑 ] |
|