Es ist ein Golf-One-Liner. Das Flag -e
bedeutet, dass der Rest der Befehlszeile als Programm ausgeführt wird. Die -l
ermöglicht automatische Zeilenendeverarbeitung.
Der <.* *>
Teil ist ein glob, der zwei zu erweiternde Muster enthält: .*
und *
.
Dieser Teil
(q=not =)
ist eine Liste einen einzelnen Wert enthält - die Zeichenfolge "nicht". Die q=...=
ist ein alternativer Zeichenfolgebegrenzer, der scheinbar verwendet wird, weil der einfache Anführungsstrich verwendet wird, um den Einzeiler zu zitieren.
Der [...]
Teil ist der Index in dieser Liste. Der Wert des Index wird entweder 0 (der Wert „nicht “) oder 1 (nichts, die als leere Zeichenkette druckt) werden in Abhängigkeit vom Ergebnis dieses Vergleichs:
2 == (()=<.* *>)
Es gibt eine Menge los hier. Der Vergleich testet, ob der Glob eine Liste von genau zwei Items zurückgegeben hat (vermutlich .
und ..
), aber wie das funktioniert, ist schwierig. Die inneren Klammern bezeichnen eine leere Liste. Wenn Sie diese Liste zuweisen, wird der Glob im Listenkontext platziert, sodass alle Dateien im Verzeichnis zurückgegeben werden. (Im skalaren Kontext würde es sich wie ein Iterator verhalten und nur einen nach dem anderen zurückgeben.) Die Zuweisung selbst wird im skalaren Kontext ausgewertet (auf der rechten Seite des Vergleichs) und gibt daher die Anzahl der zugewiesenen Elemente zurück.
Die führende +
ist zu verhindern, dass Perl die Liste als Argumente zu print
analysieren.Das nachfolgende verknüpft die Zeichenfolge "empty" mit dem, was aus der Liste kam (d. H. Entweder "nicht " oder die leere Zeichenfolge).
Fühlen Sie sich frei, die Tags für etwas passender zu bearbeiten – dsm
Haha, du bist so urkomisch! Ich rolle auf dem Boden und lache. Du hast Perl Line Noise genannt !!!! HAHAHAHAHAHAHAHAHAHAHA! – jrockway
Nizza Vorlage für "Verschleierung des Jahres". Ich mag Perl, aber ich mag Kommentare im Perl-Code. – Boldewyn