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

前端之家收集整理的这篇文章主要介绍了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,所以我没有在大项目中玩词汇$ _的乐趣。但是,感觉这样会有一个很长的路要走$ _更安全,这是一件好事。

猜你在找的Perl相关文章