Ich weiß ein wenig Perl, aber nicht genug tief, um die nächste zu verstehen.Seltsame Perl-Code - Suche nach Erklärung
Lesen perldelta 5.18 Ich fand das nächste Stück Code, was bereits deaktiviert ist in 5.18. Ohne dies zu zählen, wollen Sie immer noch verstehen, wie es funktioniert. Hier
ist der Code und die Kommentare sind, was ich verstehen
%_=(_,"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
druckt:
Just another Perl hacker,
Ich habe versucht, die perl -MO=Deparse
und erhalten die nächste
(%_) = ('_', '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
Was ist seltsam (zumindest für mich) - das Ausführen des "entparsten" Codes gibt nicht das ursprüngliche Ergebnis und pr Ints:
1/8Perl hacker,
Ich würde sehr glücklich sein:
- , wenn jemand den Code erklären kann, vor allem, wenn jemand einen Helfer Code schreiben kann, (mit zusätzlichen Schritten), was mir hilft zu verstehen, wie es funktioniert, ist - was geschieht.
- erkläre, warum der entartete Code das ursprüngliche Ergebnis nicht ausgibt.
Was bedeutet die %{'_';}
in der DEPARSED-Code?
Ich kann nicht alles erklären, aber aus irgendeinem Grund ist '_} -> {_' 'in der Regex gleichbedeutend mit $ {_} {_}' '(was für sich komisch aussieht, aber nicht zu unlesbar). – mzedeler
Was ich nicht bekomme, ist, wie der Pfeiloperator irgendwie verschlungen wird, weil es nur funktionieren sollte, wenn '' _ _ _ ''eine Hash-Referenz ist. – mzedeler