Inspired by some recent discussions on nesting trinary operators I set out to see what kind of a mess I could make (in a limited amount of space, of course). I didn't attempt to fit in as many trinaries as possible because I wanted to leave room for some other pranks as well. There are definately some strange idioms here.

If you sort through the code I hope you find it intreguing, as I definately found it so while composing it.

$c=join':',qw/42 t 83 s 0 65 78 n s 72 d 82 0 O d 82 k 0 g 65 67 j 69 82 1 ;""tnirp/;while($c){($d=@{[split//,$n]})<8?$n:$b.=$d<8?chop$c:( $e=${[split/:/,$c]}[0])=~/^\d+/?chr$e+32:++$e;$c=$b&&$c=~/(\d+|\w):( .*)$/x?$2:$c;$n=!$c&&$n=~/(.+")(".)/?$1.$b.$/.$2:$n}eval$n

I expect that running it through Deparse will help to sort it out. Let me know when you've got it unravled.

Enjoy!

Dave

"If I had my life to do over again, I'd be a plumber." -- Albert Einstein

Replies are listed 'Best First'.
Re: Ternary disaster
by idsfa (Vicar) on Sep 18, 2003 at 05:45 UTC
    Took me a little while to properly group the &&'s and the ?'s. Definitely fun exercise. Here's a slightly less obfuscated version ...
    $c=join':',qw/42 t 83 s 0 65 78 n s 72 d 82 0 O d 82 k 0 g 65 67 j 69 82 1 ;""tnirp/; while($c) { $d=@{[split//,$n]}; # Two different logic branches, depending upon the length # of $n (the result), which starts as length 0 if ($d<8) # Pop characters off the end (in reverse order) and # place onto $n { $n .= chop $c ; } else # read $c from the beginning, adding ASCII 32 to numbers # or shifting up one letter for non-numbers and place # onto $b { $b .= ($e=${[split/:/,$c]}[0]) =~ /^\d+/ ? chr $e+32: ++$e; } # If $b is non-NULL (ie, we have parsed the last eight # characters off of $c into $n) Shift off the first number # or character from $c, otherwise don't touch it $c = ($b && $c =~ /(\d+|\w):(.*)$/x) ? $2 : $c; # If $c is NULL (ie, we've processed the input string), # wedge $b plus an OS-specific linefeed between the # quotes, otherwise leave $n alone $n = (!$c && $n =~ /(.+")(".)/) ? $1.$b.$/.$2 : $n } eval $n

    Remember, when you stare long into the abyss, you could've been home eating ice cream.