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

Ani*_*han 8 variables perl

实现动态范围,我正在使用local.然后我遇到了这篇帖子,其中说明如下:

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

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

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

小智 26

您链接的帖子具有误导性,或者至少是不完整的.确实,你永远不应该local用来创建一个词法变量.它没有这样做,这my就是为了什么.

但是,你应该使用local,当你需要它的实际功能:给一个临时的值到全局变量.这通常用于临时设置Perl的特殊变量.经典案例是这样的:

{
    local $/;
    $entire_file = <$filehandle>;
}
Run Code Online (Sandbox Code Playgroud)

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

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

更新:我看到文章实际上有一个说明符合其"从不使用本地"声明.尽管如此,我认为做出如此全面的陈述是有误导性的.我同意该笔记正在回应的批评者.上面的例子是一个非常常见的基本案例,并且还有其他一些常见的用途local.

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

  • +1我同意.本地化机制,*范围,下推值*.是Perl Perl(表达性)的重要组成部分.如果它不是为了向后兼容,我们仍然可以*使用更少的这样的变量 - 这将进一步增加稀有性.我认为可以在这方面做出的最好的一点是,如果你对是否使用`local`或`my`感到困惑,你可能想要 - 或者应该想要 - 一个*lexical*,你可能应该使用`my`.即使只有1%的案例需要另一种方法,这比"从不"多1%. (2认同)

Smy*_*ers 5

使用my创建一个局部变量,这是大多数人想要的东西的时间.

可以local用于仅local执行以下操作:将全局变量设置为不同的值,该变量将在当前块之后恢复.这绝不是弃用的.它稳定,支持良好,是Perl的一项重要功能.(但是,碰巧不是人们倾向于想要创建局部变量的地方.特别是许多初学者从来不需要这样做.)

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