This submission relies upon two levels of indirection.

I started with 

XXXXX X  X XXXX   XXXX  XXXX XXX  X         X  XX  X  X XXX  X   X  XX  X   
  X   X  X X      X   X X    X  X X         X X  X X  X X  X XX  X X  X X   
  X   XXXX XXX    XXXX  XXX  XXX  X         X X  X X  X XXX  X X X XXXX X   
  X   X  X X      X     X    X X  X      X  X X  X X  X X X  X  XX X  X X   
  X   X  X XXXX   X     XXXX X  X XXXX   XXXX  XX   XX  X  X X   X X  X XXXX

and I used binary-run-length-encoding to compress it.

I replaced consecutive "X"'s with plus,comma,dash,dot and slash (ascii
characters 43 through 47) depending on whether there were 1,2,3,4 or 5 
consecutive "X"s.  I then replaced consecutive spaces with the digits
1 through 9 (ascii 49 through 57), each digit corresponding to the
appropriate number of consecutive spaces.

I then looked for common consecutive characters, such as "2+", and
replaced occurrences with the next character (":" (ascii 58)), repeating
this algorithm (replacing "1+" with ";" (ascii 59), ":;" with "<"
(ascii 60), etc.) until I ran out of characters to replace with,
leaving me with the compressed string "/vw<OpA-5coTgyUF,t".

I stored the replaced duples in a string, knowing that any ascii
character n would be the replacement of substr(string,2*n,2).  I could 
thus reverse the compression with

  s/chr($i)/substr($string,2*$i),2)/.

Of course, I thought it would be trickier to replace substr with

  ($string =~ s/(..)/g)[$i]

Finally, I reversed the binary-run-length-encoding to produce
consecutive #'s and spaces, thus restoring the ascii art.


To further complicate matters, I took this program and xor'ed every
character with 3, thus exchanging spaces and hashes (both of which are 
easy to stick into a program).

I had each line of the original program start with a space.  The
program, after being xor'ed, looked like a bunch of comments, and
could be interspersed with a de-xor-er.  The de-xor-er reads itself
and transforms the comments back into a program (and itself into
comments), which it can eval.

Just to make things trickier, I stuck in "THE PERL JOURNAL" (spelled
backwards) where it wouldn't affect the behavior, and added the ascii
art itself (which, since it is set off by spaces, will be warped into
comments by the de-xor-er).

Unfortunately, I know that

cat - | perl

will blow the second level of indirection sky-high.  But I can live
with that.

The above obfuscation algorithm is implemented in SOLUTION.pl.
