È una fodera da golf. Il flag -e
significa eseguire il resto della riga di comando come programma. -l
consente l'elaborazione automatica della fine della linea.
Il <.* *>
porzione è un glob contenente due pattern di espansione: .*
e *
.
Questa porzione
(q=not =)
è una lista che contiene un singolo valore - la stringa "no". Il numero q=...=
è un delimitatore di stringa alternativo, apparentemente utilizzato perché la virgoletta singola viene utilizzata per citare il segnaposto.
La parte [...]
è il pedice in tale elenco. Il valore del pedice sarà o 0 (il valore "non ") o 1 (niente, che stampa la stringa vuota) a seconda del risultato di questo confronto:
2 == (()=<.* *>)
C'è un sacco accadendo qui. Il confronto verifica se il glob ha restituito o meno un elenco di esattamente due articoli (supponendo che siano .
e ..
), ma come farlo è complicato. Le parentesi interne indicano una lista vuota. Assegnare a questo elenco mette il glob nel contesto dell'elenco in modo che restituisca tutti i file nella directory. (In contesto scalare si comporterebbe come un iteratore e restituirà solo uno alla volta.) L'assegnazione stessa viene valutata in contesto scalare (essendo sul lato destro del confronto) e quindi restituisce il numero di elementi assegnati.
Il numero iniziale +
impedisce a Perl di analizzare l'elenco come argomenti su print
.Il trailing .empty
concatena la stringa "vuota" a qualsiasi cosa uscisse dall'elenco (ad esempio "non " o la stringa vuota).
fonte
2009-07-14 15:55:26
Sentiti libero di modificare i tag per qualcosa di più appropriato – dsm
Haha, sei così divertente! Sto rotolando sul pavimento ridendo. Hai chiamato il rumore della linea Perl !!!! HAHAHAHAHAHAHAHAHAHAHAHAHA! – jrockway
Bella presentazione per "offuscamento dell'anno". Mi piace Perl, ma mi piacciono ancora di più i commenti in codice Perl. – Boldewyn