print "Just another Perl hacker," if "you can't think of anything better..."
''=~('('.'?' . '{'.(
'/'.'/'.')'.'.'.'/'.
'`'.'|'.'`'.'.'.'.'.
'/'.'`'.'`'.'.'.'/'.
'/'.'('.':'.'/'.'`'.
'~'.':'.'/'.','.'`'.
'`'.':'.'>'.'+'.':'.
'/'.'|'^'_'.']'.'@'.
'@'.'['.'@'.'['.'*'.
'['.']'.'['.'@'.'!'.
'@'.'@'.'['.'@'.'_'.
']'.'@'.'.'.'_'.']'.
'@'.'@'.'('.'['.']'.
'@'.'_'.']'.'[').','
.'$' .'/'.'}'.')' );
not exp log srand xor s qq qx xor
sxx length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq qq xor int
eval lc qm cos and print chr ord
for qw y abs ne open tied hex exp
ref ym xor scalar srand print qq
qq xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local xy or print qq
ss and eval qs undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return ys gt sin sort split
print qq qq
" " print qq qq
" " print qq ss
". qq indicates that the sequence delimited by a delimiter is enclosed in double quotes. The separator here are the q and s characters. Now the code can be divided into four parts:not exp log srand xor s qq qx xor
sxx length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq qq xor
int
eval lc qm cos and print chr ord
for qw y abs ne open tied hex exp
ref ym xor scalar srand print qq
qq xor
int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local xy or print qq
ss and
eval qs undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return ys gt sin sort split
not exp log srand XOR
will not display anything on the screen because there will always be a lie. s qq qx xor
equivalent to s// /
Thanks to this operation, the variable $ _ will be a space. The next part will look like this s/ /length uc ord and print chr ord for qw q join use sub tied q/
This operation will replace the space in the $ _ variable with the length uc ord and print chr ord for qw q join use sub tied q
variable length uc ord and print chr ord for qw q join use sub tied q
. length uc ord and
always true, do not take into account. but print chr ord for qw q join use sub tied q
just prints the word "just." This will become more visible if you convert to the following form: print chr ord for('join','use','sub','tied')
. It works like this: for iterates over words from an array, ord gets the code of only the first character of each word, and chr is the inverse of the ord function, returns a character by code. Then eval will execute the contents of the $ _ variable (just print just), and print qq qq
will print a space. The remaining parts are dealt with on the same principle.Source: https://habr.com/ru/post/69685/
All Articles