[Warszawa-pm] Łamigłówka ze słowami kluczowymi
Stanislaw Romanski
stas w datos.pl
Wto, 9 Cze 2009, 02:38:09 PDT
Cześć,
Na spotkaniu w środę pokazywałem kuriozalny skrypt PERLowy
znaleziony gdzieś w Internecie:
# ------------------------------------------------------------
not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split
# ------------------------------------------------------------
który drukuje 'just another perl hacker'
Fajne, prawda?
Przeprowadziłem badania nad nim i zainteresowanym przesyłam objasnienie.
# ------------------------------------------------------------
## zewnetrznie, caly program stanowi kilka wyrazen polaczonych operatorem 'xor'
## a na koncu 'or';
## aby policzyć jego wartosc, interpreter liczy wszystkie podwyrazenia
## od lewej do prawej
## wyrazenie 'not exp log srand' jest obliczane ale
## wraz z lacznikiem 'xor' nie ma zadnego znaczenia
# not
# exp
# log srand
# xor
## substytucja z separatorem 'q' wstawia do wartosci zmiennej $_ jedna spacje
## ktora bedzie potrzebna zaraz dalej;
## w tej instrukcji na koncu zamiast 'qx' rownie dobrze mogloby byc 'q'
s qq qx
xor
## w nastepnej linijce zaczyna sie wyrazenie substytucji wartosci zmiennej $_ ,
## z separatorem 'x' i spacja we wzorcu; w efekcie do zmiennej $_ zostanie
## wpisana zawartosc nastepnych linijek (bez koncowego 'x')
s x x
## wyrazenie 'length uc ord'
## wraz z lacznikiem 'and' nie ma zadnego znaczenia
# length
# uc
# ord
# and
print ## 'just' - pierwsze litery slow z listy
chr
ord
for qw
q
join
use
sub
tied
qx
xor
eval ## wykonuje 'print' wpisany wczesniej do '$_'
xor
print qq q q ## pierwsza spacja (miedzy literami 'q')
xor
# int ## 'int' bez znaczenia
eval
lc
## wyrazenie 'cos'
## wraz z lacznikiem 'and' nie ma zadnego znaczenia
q
m
# cos
# and
print chr ord ## 'another' - pierwsze litery slow z listy
for qw
y
abs
ne
open
tied
hex
exp
ref
y
m
xor
## funkcje 'srand' i 'scalar' zastosowane do wyniku 'print'
## daja wartosc która jest ignorowana
# scalar srand
print qq q q ## druga spacja (miedzy literami 'q')
xor
## operacja 'int' nie ma zadnego znaczenia
# int
eval
lc
## 'perl' - pierwsze litery slow z listy
qq
y
## zlozenie funkcji 'cos' i 'sqrt'
## wraz z lacznikiem 'and' nie ma zadnego znaczenia
# sqrt cos
# and
print
chr ord
for qw
x
printf
each
return
local
x
y
or
print qq s s ## trzecia spacja (miedzy literami 's')
and
## 'hacker' - pierwsze litery slow z listy
## operator 'q' z separatorem 's' zwraca tekst nastepnych linijek,
## ktory stanie sie argumentem 'eval'
eval
q
s
## podwyrazenia 'undef', 'oct', 'time'
## wraz z lacznikami 'or' i 'xor' nie maja zadnego znaczenia
# undef
# or
# oct
# xor
# time
# xor
## operator 'ref' dalej, dziala na wyniku 'print'
## ale jego wynik ignorujemy
# ref
print ## 'hacker' - poczatkowe litery wyrazow
chr int ord lc
foreach qw
y
hex
alarm
chdir
kill
exec
return
y
s
## operacja porownania z wynikiem operacji 'split', 'sort', 'sin'
## jest pomijalna
# gt sin sort split
# ------------------------------------------------------------
Smacznego,
Stanisław Romański
-------------- następna część ---------
Załącznik HTML został usunięty...
URL: <http://mail.pm.org/pipermail/warszawa-pm/attachments/20090609/760a042d/attachment.html>
Więcej informacji o liście Warszawa-pm