   #!/usr/bin/perl -w --                 Submitted to The Perl Journal
   (open 0),$_=<0>,s,.*?o ,,,chop;for(split?@*?){($$_++or$}=$_,y,y \,\
   y,<STDIN>,,$$=~s\^\"sub $_ {print'$}'};7"\ee),y,} \,},>STDOUT,,&$_}

Here's a clarified version:

   #!/usr/bin/perl -w --                 Submitted to The Perl Journal
   open 0;
   my $line = <0>;
   $line =~ s/.*?o //;
   chop $line;

   foreach my $char (split //, $line) {
     unless ($ {$char}++) {
       my $save_char = $char;
       $char =~ tr/ /S/;
       eval "sub $char {print '$save_char'}";
     }
     $char =~ tr/ /S/;
     &{$char};
   }

The key is, of course, 

  open 0

after which we read in the shebang line and throw away everything
through the word "to" and its trailing space, leaving "The Perl
Journal".

To spit the characters out, I create a subroutine for each character
in the string, i.e., 

   sub T { print 'T' }
   sub h { print 'h' }

etc., with the special case

   sub S { print ' ' }

since I couldn't figure out a way to have a sub called ' '.  Happily,
that gave me a way to throw those (I hope) misleading STDIN and STDOUT
sequences into the mix.

The rest is just what I imagine to be obvious and common obfuscation
techniques, including: 

 line-noise-ish variable names (such as @*, and $})
 scalar , instead of ; whenever legal
 , as delimiter for regexen, tr, and quote ops
 /e instead of eval;
 ?foo? instead of /foo/
 red herring characters in tr
 soft refs instead of hashes   
 or instead of unless{}

I spent some time massaging it so that the line widths would balance
out so nicely.  It served as my .sig on c.l.p.m. for a while.  When I
met Randal at a NY.pm bar meeting, he expressed some agony at not
having thought of "open 0" himself, so I've carried that around as a
badge of pride for some time.  I hope you enjoyed it.