in reply to Re: foreach(silly..japh)
in thread foreach(silly..japh)

Very nice. :) You almost got it all. However,

$_= '.' . chr ord
is not exactly the same thing as
$_= '.'.$_
Consider this:
${_} = q...q,.,.qq,$=,^q.$..$=; print ord() . "," foreach(split//);
and then try to replace like this:

for(;$_?$,:(${_} = q...q,.,.qq,$=,^q.$..$= => $_=q,.,.$_ );) {
It destroys the output (or should, at least). This is because ord returns the value of the first character in the string it is fed. There is a difference. If you replace all the way down to $_="\n" then it works again, of course. :)

For more clarity,

for(s//Just another perl hacker/) {
is really

foreach(s//Just another perl hacker/) {
- although they are interchangeable syntax-wise in perl.

I don't know if you used it, but sadly deparsing gives a lot away. What I do think is funny is that deparsing translates one for to while, one to foreach and leaves the last as a for:

while ($_ ? $, : ($_ = '.' . "$=" ^ '$' . $=, $_ = '.' . chr(ord $_))) + { foreach $_ (s// Just another perl hacker/) { (); } for (; s/.//; print $_) { (); } }
Then again, I guess I am easily amused.

I like your initial reminder too - that was exactly what this was "about" - abusing the for construct, which is also a bit special in perl. :)

And oh, there is one more stripping possible to do - to get to approximately where I started (using your example):

$_=".\n"; s//Just another perl hacker/; while (s/.//) { print; }
Neither of the for loops has any real reason to be nested into any other - it is really just three separate lines of code.

Thank you for taking the time - it is appreciated. :)


You have moved into a dark place.
It is pitch black. You are likely to be eaten by a grue.

Replies are listed 'Best First'.
Re: Re: Re: foreach(silly..japh)
by domm (Chaplain) on Mar 06, 2002 at 12:55 UTC
    Well, even if i didn't get right 100%, really trying to understand what is happing in some obfuscated code is at least as amusing as writing it.

    And a lot more fun than just copy-and-past'ing the code to a file and letting it run ...

      I agree totally, and that is why I hoped you would appreciate that I did point out a few extras - after all, you did crack the "obfu", and I am not trying to nitpick the solution or bring it down in any other way. :)
      You have moved into a dark place.
      It is pitch black. You are likely to be eaten by a grue.