我当时遇到了一些混淆的代码,它在我遇到一些我不明白的奇怪行为时并没有做任何有用的事情。Perl:从函数返回hashref不起作用
这是我的代码。
no strict;
sub foo{1&&{${$_[0]},${$_[0]}}}say map {&${${_}}(${_})->{${${_}}}}map{\$_}qw(foo);
而在缩进:
no strict;
sub foo {
1 && { ${$_[0]} => ${$_[0]} }
}
say map { &${ ${_} }(${_})->{ ${ ${_} } } }
map { \$_ } qw (foo);
它应该做的是把字符串foo
,建立一个参考吧,然后叫这个名字(&foo
)的功能。该函数应该返回一个hashref,其中key和value都表示foo
字符串。之后,它将打印返回的hashref的密钥foo
的值,即foo
。
到目前为止,这么好。没有用,但仍然很有趣。奇怪的是,当我删除子文件中的1 &&
部分时,尽管存在卷曲,它仍会返回一个列表,我不知道为什么它会这样做。
如果我只是说sub foo { { 'foo'=>'foo' } }
它返回参考。为什么不在我的情况?此外,为什么当我添加1 &&
?
我爱怎么perl的“可读”还在,或多或少不可读:) – asf107
这就是痛苦的Perl。当它适合一条线时,几乎没有任何借口。如果你使用多行,它应该是为了清晰起见而写的,而不是这样(除非有一些解释性的评论不存在)。 –
@ asf107他的意思是“缩进”,而不是“可读”。普通的Perl代码是完全可读的,尽管一些由开心的业余爱好者编写的代码看起来像是一团糟。 – TLP