2016-07-26 16 views
8

znalazłem ten program Perl:Jak działa ten kod Perla?

''=~('(?{'.(']])@+}'^'-/@._]').'"'.('/<[*-_<+>?}{>]@}[email protected]}]])@+}@<[*-_<+>?}{>]@^'^'`^=_^<]_[[]+[/,]_/]-/@._]/^=_^<]_[[]+[/,|').',$/})') 

drukuje "Obfuscated Perl to print obfuscated Perl"

Chcę wiedzieć, jak to rzeczywiście drukuje to.

Odpowiedz

10

Jest to dobry użytek z bitwise string XOR operator^.

']])@+}'^'-/@._]' 

ocenia się print,

'/<[*-_<+>?}{>]@}[email protected]}]])@+}@<[*-_<+>?}{>]@^' 
    ^'`^=_^<]_[[]+[/,]_/]-/@._]/^=_^<]_[[]+[/,|' 

ocenia się Obfuscated Perl to print obfuscated Perl" i cały program sprowadza się do

$ perl -MO=Deparse ... 
'' =~ m[(?{print "Obfuscated Perl to print obfuscated Perl",$/})]; 
... syntax OK 

Related: Acme::EyeDrops

+0

ja nadal nie dostać, jak to działa :(to byłoby miło, gdyby dodać szczegółowe wyjaśnienie dla '']]) @ +}'^'-/@ ._]' ' – Umair

+0

Śledź łącze. Wartość porządkowa każdego znaku w pierwszym łańcuchu to XOR z wartością porządkową odpowiedniego znaku w drugim ciągu i przekształcana z powrotem na znak. 'ord ("] ")' to 93, 'ord (" - ")' to 45, 93 xor 45 to 112. 'chr (112)' to 'p' – mob

+1

Zauważ, że potrzebujesz' use re 'eval'; 'z 5.24 i nowszymi. –