私は少しだけ 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
(少なくとも私にとって)奇妙なことは、「逆解析された」コードを実行しても元の結果が得られず、次のように出力されることです。
1/8Perl hacker,
とてもうれしくなる:
- 誰かがコードを説明できれば、特に誰かがヘルパー コードを (追加の手順で) 書くことができれば、それがどのように機能するかを理解するのに役立ちます - 何が起こるか.
- デパースされたコードが元の結果を出力しない理由を説明してください。
%{'_';}
デパースされたコードの はどういう意味ですか?