Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl – 什么是’sub bar {{_ _ [1] => $_ [2]}}`完全可以吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不明白这个例子中的糖迹象在某个地方,
sub bar { +{$_[1] => $_[2]} }

我写了这个,我没有看到任何差异:

use Data::Dumper;

# Not any differences here
my $foo =  {value => 55};
my $bar = +{value => 55};

print Dumper $foo;
print Dumper $bar;

# Oh ! Here there is something...
sub foo {  {$_[1] => $_[2]} };
sub bar { +{$_[1] => $_[2]} };

print Dumper foo('value',55);    
print Dumper bar('value',55);

foo返回

$VAR1 = 55;
$VAR2 = undef;

酒吧回来

$VAR1 = {
          '55' => undef
        };

解决方法

它有助于解析器区分匿名哈希和代码块.

引用Learning Perl Objects,References & Modules

或从地图上的文档功能:

"{" starts both hash references and blocks,so "map { ..." could
be either the start of map BLOCK LIST or map EXPR,LIST. Because
Perl doesn't look ahead for the closing "}" it has to take a guess
at which it's dealing with based on what it finds just after the
"{". Usually it gets it right,but if it doesn't it won't realize
something is wrong until it gets to the "}" and encounters the
missing (or unexpected) comma. The syntax error will be reported
close to the "}",but you'll need to change something near the "{"
such as using a unary "+" or semicolon to give Perl some Help:

    %hash = map {  "\L$_" => 1  } @array # perl guesses EXPR. wrong
    %hash = map { +"\L$_" => 1  } @array # perl guesses BLOCK. right
    %hash = map {; "\L$_" => 1  } @array # this also works
    %hash = map { ("\L$_" => 1) } @array # as does this
    %hash = map {  lc($_) => 1  } @array # and this.
    %hash = map +( lc($_) => 1 ),@array # this is EXPR and works!

    %hash = map  ( lc($_),1 ),@array # evaluates to (1,@array)

or to force an anon hash constructor use "+{":

    @hashes = map +{ lc($_) => 1 },@array # EXPR,so needs
                                           # comma at end

to get a list of anonymous hashes each with only one entry apiece.

大佬总结

以上是大佬教程为你收集整理的perl – 什么是’sub bar {{_ _ [1] => $_ [2]}}`完全可以吗?全部内容,希望文章能够帮你解决perl – 什么是’sub bar {{_ _ [1] => $_ [2]}}`完全可以吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。