Qui non c'è magia, solo offuscamento. Diamo una visione di alto livello. La prima cosa da notare è che in seguito, ogni personaggio stringhe viene interpretato come se fosse il carattere precedente:
[1] map{chr(ord()-1)} ...
Così, una stringa come "6qD" si tradurrà in "5rC" (i caratteri prima ' 6 ',' q 'e' D ', rispettivamente). Il punto principale di interesse è l'array di stringhe vicino l'inizio:
[2] ">>>E!)",">>>E)",">>>E",">>>",">>",">",""
Questo definisce una sequenza di "maschere" che sostituirà in seguito, in questa stringa:
[3] "9$_*\x{0e}"
Faranno inserire nel punto $_
. La stringa \x{0e}
rappresenta un carattere di controllo esadecimale; notare che \x{0d}
, il carattere immediatamente precedente, è un ritorno a capo. Questo è ciò che verrà sostituito in [3] quando facciamo [1].
Prima che la stringa [3] sia assemblata, viene anteposto un numero di !
uguale a i a ciascun elemento in [2]. Ogni elemento successivo ottiene un altro !
rispetto all'elemento precedente. Si noti che il carattere il cui valore è appena prima dello !
è uno spazio
.
Il resto dei itera di script su ciascuno degli elementi dell'array assemblati, che ora assomigliano più a questo:
[4] "!!!!!9>>>E!)\x{0e}", ---> " 8===D ("
"!!!!!!9>>>E)\x{0e}", ---> " 8===D("
"!!!!!!!9>>>E\x{0e}", ---> " 8===D"
"!!!!!!!!9>>>\x{0e}", ---> " 8==="
"!!!!!!!!!9>>\x{0e}", ---> " 8=="
"!!!!!!!!!!9>\x{0e}", ---> " 8="
"!!!!!!!!!!!9\x{0e}", ---> " 8"
Poi l'operazione reverse
aggiunge i medesimi elementi in senso inverso, creando un ciclo.
A questo punto si dovrebbe essere in grado di vedere il modello emerge che produce l'animazione. Ora è solo questione di passare attraverso ogni fase dell'animazione e viceversa, cosa che viene compiuta dal resto dello script. Il ritardo passo temporale di ogni fase è regolata dalla dichiarazione prescelta:
[5] select undef, undef, undef, 0.25
che ci dice di aspettare 250 millisecondi tra ogni iterazione. Puoi cambiarlo se vuoi vederlo accelerare o rallentare.
qual è il problema, ad eccezione di estrema bruttezza? – anthares
Rumore di linea eseguibile :-D – Krab
Le magiche fate Perl rendono tutto possibile. – Ether