我當時遇到了一些混淆的代碼,它在我遇到一些我不明白的奇怪行爲時並沒有做任何有用的事情。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