Я знаю немного perl, но недостаточно глубоко, чтобы понять следующее.Странный код 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,
Я был бы очень рад:
- если кто-то может объяснить код, особенно если кто-то может написать вспомогательный код, (с дополнительными шагами), что помогает мне понять, как это работает - что происходит.
- объясните, почему депарафинированный код не распечатывает исходный результат.
Что означает %{'_';}
в тексте deparsed?
Я не могу объяснить все, но почему-то '' _} -> {_ '' в регулярном выражении эквивалентно '' $ {_} {_} '' (который сам по себе выглядит забавным, но не тоже нечитабельно). – mzedeler
Я не понимаю, как оператор стрелки каким-то образом поглощается, потому что он должен работать, только если '' $ _'' был хеш-ссылкой. – mzedeler