Clo*_*ble 12
local($ x)保存全局变量$ x的旧值,并为子例程的持续时间分配一个新值,该值在从该子例程调用的其他函数中可见.这是在运行时完成的,因此称为动态范围.local()总是影响全局变量,也称为包变量或动态变量.
my($ x)创建一个仅在当前子例程中可见的新变量.这是在编译时完成的,因此称为词法或静态作用域.my()总是影响私有变量,也称为词法变量或(不正确地)静态(缩放)变量.
看看Perl-FAQ的:
我将添加一个简单的示例。
$var = "Global";
sub inner {
print "inner: $var\n";
}
sub changelocal {
my $var = "Local";
print "changelocal: $var\n";
&inner
}
sub changedynamic {
local $var = "Dynamic";
print "changedynamic: $var\n";
&inner
}
&inner
&changelocal
&changedynamic
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出(添加了注释)。
inner: Global # Finds the global variable.
changedynamic: Dynamic # Dynamic variable overrides global.
inner: Dynamic # Find dynamic variable now.
changelocal: Local # Local variable overrides global.
inner: Global # The local variable is not in scope so global is found.
Run Code Online (Sandbox Code Playgroud)
您可以将动态变量视为屏蔽所调用函数的全局变量的一种方法。词汇范围变量仅在最近括号内的代码中可见。
| 归档时间: |
|
| 查看次数: |
6270 次 |
| 最近记录: |