|
在 Perl5 出现之前,local 函数负责在 Perl 脚本中打开按值调用模式(call by value)。后来在 Perl5 中引入了另一个函数 my,它能进一步保障变量在代码块中的私有性。
任何使用 local 函数声明的变量都是动态拷贝的,也就是说,该变量不但在创建它的块中可见,而且对于任何从该代码块调用的函数或在嵌入定义的代码块中也是可见的。
my 则与之不同,由 my 声明的变量从声明之处开始到最内层包含的块中都是可见的。这里的块(block)是指包括所有位于花括号中的代码块,子例程或文件。
my 与 local 不同的是,my 函数声明得到的所有变量都只在声明它的子例程中可见,对该子例程调用的任何其他子例程都是不可见的。
【注】这里所说的子例程和子函数是同一概念。
下面看一段代码演示:
[code=perl]#!/usr/bin/perl
$first = "hello";
$last = "Perl";
&hello ($first, $last);
sub hello {
local ($fname, $lname) = @_;
my ($fname2, $lname2) = @_;
&place;
&place2;
&placein;
sub placein {
print "In hello:$fname2\n";
print "In hello:$lname2\n";
}
}
sub place {
print "$fname\n";
print "$lname\n";
}
sub place2 {
print "$fname2\n";
print "$lname2\n";
}[/mw_shl_code]
运行输出:$ ./parameter.pl
hello
Perl
In hello:hello
In hello:Perl |
|