Though not as cool as the ascii art stuff, and not really obfuscated (so why are you posting it then?! Just read on for the anwer) I just felt the urge to post this cuty (here's your anwer).

It runs without producing errors or warnings unless you use strict or use warnings.
I tried to do it with barewords at first but I didn't get that to work :)
sub I;sub put;sub remove; I put "the J in RAPH" and remove "the r"; sub I{print "\n";}sub put{($letter,$word)=$_[0]=~m/^the\s(. )\sin\s.(.+)$/ix;print $letter.$word;return 0;}sub remove{}




"2b"||!"2b";$$_="the question"
Besides that, my code is untested unless stated otherwise.

magnum unum bovem audivisti

Replies are listed 'Best First'.
Re: I put the J in JAPH
by fishbot_v2 (Chaplain) on Sep 18, 2005 at 15:43 UTC

    You can add in strict and warnings thusly. Plus, I trimmed and obfuscated a tad more:

    use strict; use warnings; sub I{print@_,chr(0x0a)}sub remove{}sub put{shift=~m/^\w+\s(.)\s\w+\s.(.+)/ix;} I put "the J in RAPH" and remove "the r"

    On second thought, it might be more fun if remove did what it said it did...

      On second thought, it might be more fun if remove did what it said it did...

      I agree, and have thought about that, but I decided that would be too much fuss :)
      Furthermore, I don't know how to let remove() remove the "r" but with 'and' still working.




      "2b"||!"2b";$$_="the question"
      Besides that, my code is untested unless stated otherwise.

      magnum unum bovem audivisti
        I thought your idea extremely clever.

        It occurred to me that you could remove ALL of the quotation marks, by carrying the idea further ...

        sub I {$O=$_[0]} sub put {$_[0]} sub the {$_[0]} sub J {'J'.$_[0]} sub in {$_[0]} sub RAPH {82.65.80.72} sub remove {$O=~s~$_[0]~~;print$O."\n"} sub R {'R'} I put the J in RAPH and remove the R
        How it works ...
        First, delineating the order of evaluation:

          Expression:  (I (put (the (J (in (RAPH)))))) and (remove (the (R)))

        Subroutines "put", "the" and "in" just return their single argument, so they are all effectively NOOPs. This reduces the expression to:

          Expression:  (I ( ( (J ( (RAPH)))))) and (remove ( (R)))

        = Expression: (I (J RAPH)) and (remove R)

        Now, subroutine "RAPH" returns "RAPH", and subroutine "J" prepends a 'J' to the argument passed to it. So (J RAPH) equates to "JRAPH":

          Expression:  (I "JRAPH") and (remove R)

        Then, subroutine "I" assigns its argument to $O (the variable is an uppercase 'o', for "obscure:, "obtuse", and "obfuscated" :-).  Finally, the subroutine "remove" takes a single argument (in this case 'R', which was returned from subroutine "R"), removes it from the variable $O, and prints the result.

            Result:  [$x set to "JRAPH"] and [$x =~ s/R//, and then print $x]

        Note that it also causes remove() to actually perform the remove.