my ,"把名字和值都限于限于某个范围",简单说,就是只能本层模块或者函数可以看到这个变量,高一层的或者低一层的都看不到的。
sub greeting1{
my ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
运行结果:
How are you doing?
How are you doing?
How are you doing?
--------------------------
一个 How are you do? 都没有,在greeting1中call greeting2时,greeting2看不到greeting1的私有 $hello变量,只能看到外面的全局变量$hello
sub greeting1{
local ($hello) = "How are you do?";
greeting2();
}
sub greeting2{
print "$hello\n";
}
$hello = "How are you doing?";
greeting2();
greeting1();
greeting2();
运行结果:
How are you doing?
How are you do?
How are you doing?
-----------------------
跟用 my 时不一样了吧? 此时在greeting1调用greeting2时,greeting2可以看到greeting1的局部变量$hello,外部的全局变量当然就隐藏了。