8

实现动态范围,我使用的是local. 然后我看到了这个帖子,上面写着:

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

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

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

4

3 回答 3

26

您链接到的帖子具有误导性,或者至少不完整。确实,您永远不应该使用它local来创建词法变量。它不这样做,这就是my目的。

但是,您应该在需要它的实际功能时使用local:为全局变量提供临时值。这最常用于临时设置 Perl 的特殊变量。一个经典案例是这样的:

{
    local $/;
    $entire_file = <$filehandle>;
}

为了一次读取整个文件,您需要将记录分隔符设置为未定义。但是您只想暂时这样做;因此local应该使用。

这绝对不气馁。它被认为是好的 Perl 代码。

更新:我看到这篇文章实际上有一个注释,它符合其“从不使用本地”声明。不过,我认为做出这样笼统的声明是有误导性的。我同意该说明所回应的批评者。上面的例子是一个非常常见的基本案例,在这方面还有其他几种常见的用法local

我知道初学者教程需要保持简单,但简单并不一定意味着不准确。 “现在,不要担心local;只需使用my将同样清晰简单,但不会误导某人认为永远不应该使用 local 。

于 2013-01-22T12:00:16.673 回答
5

用于my创建局部变量,这在大多数情况下是人们想要的。

local仅用于做的事情很好local:为全局变量设置不同的值,该变量将在当前块之后恢复。这绝不会被弃用。它很稳定,得到很好的支持,并且是 Perl 的一个关键特性。(然而,它碰巧不像创建局部变量那样经常成为人们想要的东西。特别是许多初学者从不需要这样做。)

不鼓励使用local尝试创建局部变量,因为那是my应该使用的。从来没有任何理由使用local它。

于 2013-01-22T11:58:07.783 回答
1

实际上,这不是一个坏建议。与所有编程格言一样,未说出口的附录是“除非你真的知道自己在做什么”。有合法的用例local。但总的来说,如果您认为local是正确的工具,您应该在继续之前重新考虑。

于 2013-01-22T18:18:44.297 回答