my是用来将一个词法的名字和值限制在其有效范围。
//file1
my $val=1;
sub fun1{
print $val; //此时类似于static文件全局变量
my $val2 = 10;
fun2(); //fun2看不到val2
}
our是用来表明正在访问一个全局变量,其有效范围可以通过子函数传递
//file2
our $PROGRAM_NAME = "waiter";
{
our $PROGRAM_NAME = "server";
# 这里调用的代码看到的是"server"
}
# 这里执行的代码看到的仍然是"server".
而local则不一样,
//file3
local $PROGRAM_NAME = "waiter";
{
local $PROGRAM_NAME = "server";
# 这里的代码看到"server".
...
}
# 这里执行的代码再次看到"watier"
通过local或者our去访问在文件范围的my变量时,会发生警告甚至错误。
如果打开了use stric 'vars';则不允许通过local方式在文件范围声明全局变量,而my的词法是允许的。引入our的原因就是通过our可以声明一个全局变量了,编译器不会抱怨
阅读(2111) | 评论(0) | 转发(0) |