实施动态范围,我使用 local
。然后我遇到了 this 帖子,其中说明了以下内容:
为什么要有本地人?答案是90%的历史。早期版本 Perl只有全局变量。本地很容易实现,并且 被添加到Perl 4作为局部变量的部分解决方案 问题
...永远不要使用本地。
它的使用是否被弃用或不鼓励?如果是,那么替代方案是什么?
答案 0 :(得分:26)
您链接的帖子具有误导性,或者至少是不完整的。确实,你永远不应该使用local
来创建一个词法变量。它没有这样做,这就是my
的用途。
但是,当您需要实际功能时,应该使用local
:为全局变量提供临时值。这通常用于临时设置Perl的特殊变量。经典案例是这样的:
{
local $/;
$entire_file = <$filehandle>;
}
要一次读取整个文件,您需要将记录分隔符设置为undefined。但你只想暂时这样做;因此应该使用local
。
绝对不要气馁。它被认为是很好的Perl代码。
更新:我看到该文章实际上有一个注释,它符合其“从不使用本地”声明。尽管如此,我认为做出如此全面的陈述是有误导性的。我同意该笔记正在回应的批评者。上面的例子是一个非常常见的基本案例,local
也有其他几种常见用法。
我知道初学者的教程需要保持简单,但简单并不一定意味着不准确。 “现在,不要担心local
;只需使用my
”就会明白而简单,但不会误导别人认为本地应该<永远不会使用。
答案 1 :(得分:5)
使用my
创建一个局部变量,这是人们想要的大部分时间。
将local
用于仅local
的事情是可以的:为全局变量设置不同的值,该变量将在当前块之后恢复。这绝不是弃用的。它稳定,支持良好,是Perl的一项重要功能。 (然而,事实上,人们往往不会像创建局部变量那样经常需要它。特别是许多初学者从来不需要这样做。)
不鼓励使用local
尝试创建局部变量,因为my
应该使用它。从来没有任何理由使用local
。
答案 2 :(得分:1)
local
有合法用例。但总的来说,如果你认为local
是正确的工具,你应该在继续之前重新考虑。