Perl中词法范围和动态范围的区别是什么?
据我所知,Perl中词法范围和动态范围的区别是什么?,perl,scope,Perl,Scope,据我所知,my运算符用于声明真正在词汇范围内的变量,而动态作用域是使用local运算符来声明变量的 有人能简单地描述一下吗 局部($x)保存全局变量$x的旧值,并 为正在运行的子例程的持续时间指定一个新值 在从该子例程调用的其他函数中可见。这已经完成了 在运行时,称为动态作用域。local()始终影响 全局变量,也称为包变量或动态变量 my($x)创建一个新变量,该变量仅在当前视图中可见 子程序。这是在编译时完成的,因此称为词法或 静态作用域。my()始终影响私有变量,也称为 词法变量或(不正确
my
运算符用于声明真正在词汇范围内的变量,而动态作用域是使用local
运算符来声明变量的
有人能简单地描述一下吗
局部($x)保存全局变量$x的旧值,并
为正在运行的子例程的持续时间指定一个新值
在从该子例程调用的其他函数中可见。这已经完成了
在运行时,称为动态作用域。local()始终影响
全局变量,也称为包变量或动态变量
my($x)创建一个新变量,该变量仅在当前视图中可见
子程序。这是在编译时完成的,因此称为词法或
静态作用域。my()始终影响私有变量,也称为
词法变量或(不正确)静态(范围不正确)变量
请看::
my
创建局部变量<代码>本地没有
我将添加一个快速示例
$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
这将提供以下输出(添加注释)
可以将动态变量看作是为调用的函数屏蔽全局变量的一种方法。其中,作为词法范围的变量只能从最近大括号内的代码中看到。“my($x)创建了一个新变量,该变量只能在当前子例程中看到”。事实并非如此<代码>我的创建仅在当前代码块中可见的新变量。子例程只是块的一个示例。您在定义
local
@O.D时也犯了类似的错误:如果{}
周围没有花括号,那么我的范围就是整个文件。其中任何一个都是Perl的当前代码块。
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.