Il n'y a pas de magie ici, juste une obfuscation. Prenons une vue de haut niveau. La première chose à noter est que plus tard, tous les caractères dans les chaînes est interprété comme si elle était le caractère précédent:
[1] map{chr(ord()-1)} ...
Ainsi, une chaîne comme « 6qD » se traduira par « 5rC » (les caractères avant ' 6 ',' q 'et' D ', respectivement). Le principal point d'intérêt est le tableau de chaînes vers le début:
[2] ">>>E!)",">>>E)",">>>E",">>>",">>",">",""
Cela définit une séquence de « masques » que nous allons remplacer plus tard, dans cette chaîne:
[3] "9$_*\x{0e}"
Ils vont être inséré au point $_
. La chaîne \x{0e}
représente un caractère de contrôle hexadécimal; Notez que \x{0d}
, le caractère juste avant, est un retour chariot. C'est ce qui va être substitué dans [3] quand nous faisons [1].
Avant que la chaîne [3] ne soit assemblée, nous ajoutons un nombre de !
égal à i pour chaque élément de [2]. Chaque élément successif obtient !
de plus que l'élément précédent. Notez que le caractère dont la valeur est juste avant !
est un espace
.
Le reste du script itère sur chacun des éléments du tableau assemblés, qui ressemblent maintenant plus comme ceci:
[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"
Ensuite, l'opération reverse
les mêmes éléments ajoute à l'inverse, la création d'une boucle.
À ce stade, vous devriez être en mesure de voir le motif qui émerge et qui produit l'animation. Maintenant, il suffit de passer à travers chaque étape de l'animation et de revenir, ce qui est accompli par le reste du script. Le retard de timestep de chaque étape est régie par l'instruction select:
[5] select undef, undef, undef, 0.25
qui nous dit d'attendre 250 millisecondes entre chaque itération. Vous pouvez changer cela si vous voulez le voir accélérer ou ralentir.
Quel est le problème, sauf extrême laideur? – anthares
Bruit de ligne exécutable :-D – Krab
Les fées magiques Perl rendent tout cela possible. – Ether