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

奇怪的perl代码 – 寻找解释

发布时间:2020-12-15 21:31:04 所属栏目:大数据 来源:网络整理
导读:我知道一点点perl,但不够深入了解下一个. 阅读perldelta 5.18我发现下一段代码5.18中已经禁用了.不算这个,还是要了解它是如何工作的. 这是代码,在评论中是我所了解的 %_=(_,"Just another "); #initialize the %_ hash with key=value _ = 'Just another'$_=
我知道一点点perl,但不够深入了解下一个.

阅读perldelta 5.18我发现下一段代码5.18中已经禁用了.不算这个,还是要了解它是如何工作的.

这是代码,在评论中是我所了解的

%_=(_,"Just another "); #initialize the %_ hash with key=>value   _ => 'Just another'
$_="Perl hacker,n";    #assign to the $_ variable with "Perl..."
s//_}->{_/e;            # darkness. the /e - evauates the expression,but...
print

它打印:

Just another Perl hacker,

我试过,perl -MO = Deparse并得到下一个

(%_) = ('_','Just another ');   #initializing the %_ hash
$_ = "Perl hacker,n";           # as above
s//%{'_';}/e;                    # substitute to the beginning of the $_ - WHAT?
print $_;                        # print the result
japh syntax OK

什么是奇怪的(至少对我来说) – 运行“deparsed”代码并没有给出原始的结果和打印:

1/8Perl hacker,

我会很高兴:

>如果有人可以解释代码,特别是如果有人可以编写一个帮助代码,(附加步骤)什么帮助我了解它是如何工作的 – 会发生什么.
>解释为什么deparsed代码不打印原??始的结果.

什么意思是代码中的%{‘_’}?

解决方法

代码操作符实际执行的代码可能实际上是类似的
my $code = "do { $repl_expr }";

所以当替换表达式为_} – > {_时,执行以下操作:

do { _}->{_ }

_简单地返回字符串_(因为strict是关闭的),所以这是一样的

do { "_" }->{_}

这是一样的

"_"->{_}

你在那里有一个哈希元素解引用,其中引用是一个符号引用(即一个字符串而不是一个实际引用).通常严格禁止,这里是一个象征性参考的例子:

%h1 = ( id => 123 );
%h2 = ( id => 456 );
print "h$_"->{id},"n"
   for 1..2;

这样的意思

"_"->{_}    # Run-time symbol lookup

是相同的

$_{_}       # Compile-time symbol lookup

一个类似的技巧经常用于单排.

perl -nle'$c += $_; END { print $c }'

可以缩短

perl -nle'$c += $_; }{ print $c'

因为在使用-n时实际执行的代码是从相当于的东西获得的

my $code = "LINE: while (<>) { $program }";
%{'_';}

是一种非常奇怪的写法

%{'_'}

这是一个哈希取消引用.再次,这里的参考是一个象征性的参考.相当于

%_

在标量上下文中,哈希电流返回一个值,该值报告有关该哈希内部的一些信息(如果为空则返回假值).有一个建议改变它返回键的数量.

(编辑:李大同)

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

    推荐文章
      热点阅读