perl my和local

在perl子函数中,可以直接引用和修改全局变量,如:

$var = “global”;

sub foo() {
print $var;
$var .= ” extend”;
}

foo();
print(“\n”);
print($var);

输出:

global
global extend
可以看出,子函数可以引用和修改全局变量,当你不确定有哪些全局变量,且定义了与全局变量同名的变量时,这样就造成了冲突,这时可以通过perl里面的my和local关键字来解决,它们俩都是用来定义局部变量的,但有区别,local定义的局部变量的生命周期可以延续到当前子函数所调用的其它子函数里,而my则没有这个特性,举例说明:

$var = “global”;

sub foo() {
local $var = “assigned by foo sub”;
foo2();
}
sub foo2() {
print($var);
print(“\n”);
}

foo();
print($var);

输出:

assigned by foo sub
global
————————————————————————

$var = “global”;

sub foo() {
my $var = “assigned by foo sub”;
foo2();
}
sub foo2() {
print($var);
print(“\n”);
}

foo();
print($var);

输出:

global
global

Comments are closed.