奇怪的perl代码 – 寻找解释

前端之家收集整理的这篇文章主要介绍了奇怪的perl代码 – 寻找解释前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道一点点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 }";
%{'_';}

是一种非常奇怪的写法

%{'_'}

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

%_

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

原文链接:https://www.f2er.com/Perl/172666.html

猜你在找的Perl相关文章