奇怪的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 }"; %{'_';} 是一种非常奇怪的写法 %{'_'} 这是一个哈希取消引用.再次,这里的参考是一个象征性的参考.相当于 %_ 在标量上下文中,哈希电流返回一个值,该值报告有关该哈希内部的一些信息(如果为空则返回假值).有一个建议改变它返回键的数量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |