总是用我的;从不使用本地?

时间:2013-01-22 11:33:54

标签: perl variables

实施动态范围,我使用 local 。然后我遇到了 this 帖子,其中说明了以下内容:

  

为什么要有本地人?答案是90%的历史。早期版本   Perl只有全局变量。本地很容易实现,并且   被添加到Perl 4作为局部变量的部分解决方案   问题

...永远不要使用本地。

它的使用是否被弃用或不鼓励?如果是,那么替代方案是什么?

3 个答案:

答案 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)

实际上,建议并不错。与所有编程方案一样,未说明的附录是"unless you really know what you're doing"local有合法用例。但总的来说,如果你认为local是正确的工具,你应该在继续之前重新考虑。