加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl 5.10中的好,坏,和词汇$_的丑陋

发布时间:2020-12-15 21:20:18 所属栏目:大数据 来源:网络整理
导读:从Perl 5.10开始,现在可以将上下文变量$ _进行词法范围的显式定义为$ _;或在给定/何时构造。 有没有人发现词汇$ _的好用处?它是否使任何构造更简单/更安全/更快? 那么它会变得更复杂的情况呢?词汇$ _引入了你的代码中的任何错误吗? (因为写入$ _的控制
从Perl 5.10开始,现在可以将上下文变量$ _进行词法范围的显式定义为$ _;或在给定/何时构造。

有没有人发现词汇$ _的好用处?它是否使任何构造更简单/更安全/更快?

那么它会变得更复杂的情况呢?词汇$ _引入了你的代码中的任何错误吗? (因为写入$ _的控制结构将使用词法版本,如果它在范围内,如果它包含任何子例程调用(由于动态范围的丢失),则可以改变代码的行为)

最后,我想构建一个清单,说明何时使用$ _作为词法,作为全局的,或者什么时候没有关系。

注意:从perl5-5.24开始,这些实验功能是no longer part of perl。

解决方法

海事组织,一个伟大的事情来自词汇$ _是新的_原型符号。

这允许您指定一个子例程,以便它将需要一个标量,或者如果没有提供它,它将获取$ _。

所以代替写作:

sub foo {
    my $arg = @_ ? shift : $_;

    # Do stuff with $_
}

我可以写:

sub foo(_) {
    my $arg = shift;

    # Do stuff with $_ or first arg.
}

不是一个很大的变化,但是当我想要这种行为时,这只是简单得多。拆除锅炉是件好事。

当然,这样会改变几个内建(例如chr)的原型,这可能会打破一些代码。

总的来说,我欢迎词汇$ _。它给了我一个工具,我可以用来限制意外的数据暴露和功能之间的离奇的交互。如果我决定在函数体中使用$ _,通过对它进行词法化,我可以确定我所调用的任何代码,$ _不会在调用代码中被修改。

动态范围很有趣,但在大多数情况下,我想要词汇作用域。加上$ _附近的并发症。我听到了关于简单地做本地$ _的不合适性的可怕警告; – 最好使用($ foo){}。词汇化$ _给我我想要的99次,100当我已经本地化$ _无论如何。词汇$ _使非常方便和可读性更加强大。

我的大部分工作都不得不使用perl 5.8,所以我没有在大项目中玩词汇$ _的乐趣。但是,感觉这样会有一个很长的路要走$ _更安全,这是一件好事。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读