当我遇到一些我不理解的奇怪行为时,我在玩弄一些没有任何用处的混淆代码。
这是我的代码。
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,其中键和值都是foo
字符串。之后,它打印返回的 hashref 的 key 的值foo
,即foo
.
到目前为止,一切都很好。没用,但还是很有趣。奇怪的是,当我删除1 &&
sub 中的部分时,尽管有卷曲,它仍会返回一个列表,我不知道为什么会这样做。
如果我只是说它sub foo { { 'foo'=>'foo' } }
返回参考。为什么在我的情况下没有?此外,为什么在我添加时会出现1 &&
?