奇怪的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, 我会很高兴: >如果有人可以解释代码,特别是如果有人可以编写一个帮助代码,(附加步骤)什么帮助我了解它是如何工作的 – 会发生什么. 什么意思是代码中的%{‘_’}? 解决方法
 代码操作符实际执行的代码可能实际上是类似的 
  
  
  
        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 }"; 
 %{'_';} 
 是一种非常奇怪的写法 %{'_'} 
 这是一个哈希取消引用.再次,这里的参考是一个象征性的参考.相当于 %_ 在标量上下文中,哈希电流返回一个值,该值报告有关该哈希内部的一些信息(如果为空则返回假值).有一个建议改变它返回键的数量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
