Syntax of for:
for (init something;test;do something) {
stuff
}
In the first for, you don't init anything, have a long test, and do nothing, so you could also write the first line as a while-loop:
while ($_?$,:(${_} = q...q,.,.qq,$=,^q.$..$= => $_=q,.,.chr ord)) {
Here you first check if $_ is defined. If it is, you return $, which defaults to undef, thus ending the loop. If $_ is not defined (the default), we enter this statement:
${_} = q...q,.,.qq,$=,^q.$..$= => $_=q,.,.chr ord
Now, lets de-obfuscate:
${_} is the same as $_, the curly braces beeing used like in @{$arrayref}
q.. . q,., . qq,S=, ^ q.$. . $= => $_=q,., . chr ordlooks like
'' . '.' . "$=" ^ '$' . $= , $_= '.' . chr ordwhen using normal quotes.
This is a list consisting of two items:
'' . '.' . "$=" ^ '$' . $=and
$_= '.' . chr ordLets look at the first part:
'' . '.' . "$=" ^ '$' . $=
This uses ^ as XOR, which somehow means (i'm not tha good at bitwise stuff)that each bit on the left of ^ gets XOR'ed with each bit on the right, so:
'.$=' ^ '$60'(where is the 60 coming from? $= or $FORMAT_LINES_PER_PAGE defaults to 60) which yields the linebrake used in the cascade.
Now, the second part:
$_= '.' . chr ordThis is very intuitive way to write
$_= '.'.$_ord converts the contents of $_ into the numeric ascii value. Those values then get passed to chr, wich converts numeric asscii values to the corresponding character.
Adding the two parts together, we now have:
($_="\n",$_='.'.$_;)Which can be further simplified to:
($_=".\n")
So the whole first line looks now like
for(;$_ ? undef : ($_=",\n") {
for(s .. Just another perl hacker.) {
Here you use a . as a regex-separator, so this looks like
for(s//Just another perl hacker/) {
which substitutes the first empty string in $_ with 'Just another perl hacker' and therefor is the same as
s//Just another perl hacker/;
for(;s;.;;;print){ }
remebering the for-syntax, you here again intialise nothing.So:
while (s/.//) {
print $_;
}
We end up with:
while($_ ? undef : ($_=".\n")) {
s//Just another perl hacker/;
while (s/.//) {
print;
}
}
Now lets de-obfuscate the algorithm
The stuff inside the main for-loop is quite easey:
Put "Just another perl hacker" into $_, chop of the first char and print it.
The interesting stuff happens in the definintion of the first while loop
If $_ is defined, return undef. As $_ is not defined by default, in the first run, do the other part if the ? : statement, which sets $_ to "\n."
Now we enter the code in the while-loop, that adds "Just another perl hacker" in front of $_ and than prints the cascade.
That's it (I think ...)
In reply to Re: foreach(silly..japh)
by domm
in thread foreach(silly..japh)
by Dog and Pony
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |