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

perl中的“%_”是什么?

发布时间:2020-12-15 21:24:35 所属栏目:大数据 来源:网络整理
导读:我刚刚得到一个代码片段: @list = grep { !$_{$_}++ } @list; 作为重复数据删除的习语。它似乎工作,但 – 没有%_列出perlvar。 我通常是写上面的声明%看到例如: my %seen; my @list = grep { not $seen{$_}++ } @list; 但%_似乎工作,虽然它似乎是全球
我刚刚得到一个代码片段:
@list = grep { !$_{$_}++ } @list;

作为重复数据删除的习语。它似乎工作,但 – 没有%_列出perlvar。

我通常是写上面的声明%看到例如:

my %seen; my @list = grep { not $seen{$_}++ } @list;

但%_似乎工作,虽然它似乎是全球范围。任何人都可以指点我的参考吗? (或至少再次保证我,做上述是不是粉碎的东西重要!)

解决方法

这是一个哈希。您可以有一个名为_的哈希,因为_是变量的有效名称。 (我相信你熟悉$ _和@_。)

没有Perl内置当前设置它或读取%_ implicitly,但标点符号变量如%_保留。

Perl variable names may also be a sequence of digits or a single punctuation or control character (with the literal control character form deprecated). These names are all reserved for special uses by Perl

请注意,标点符号变量也是特殊的,因为它们是“超级全局”。这意味着不合格的%_是指根包中的%_,而不是当前包中的%_。

$ perl -E'
   %::x    = ( name => "%::x"    );
   %::_    = ( name => "%::_"    );
   %Foo::x = ( name => "%Foo::x" );
   %Foo::_ = ( name => "%Foo::_" );

   package Foo;

   say "%::x    = $::x{name}";
   say "%::_    = $::_{name}";
   say "%Foo::x = $Foo::x{name}";
   say "%Foo::_ = $Foo::_{name}";

   say "%x      = $x{name}";
   say "%_      = $_{name}";
'
%::x    = %::x
%::_    = %::_
%Foo::x = %Foo::x
%Foo::_ = %Foo::_
%x      = %Foo::x
%_      = %::_      <-- surprise!

这意味着忘记使用本地%_(如你所做)可以产生非常深远的影响。

(编辑:李大同)

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

    推荐文章
      热点阅读