1998 The Perl Journal Obfuscated Perl Contest.
Entry for Category 3 (Best "The Perl Journal") by
Sven Neuhaus <sven@ping.de> and Michael Stiller <michael@ping.de>

Solutions:
The program converts a string ($_) of arbitrary length containing spaces and 
newlines ("whitespace", according to the contest rules ;-), 
into 0's and 1's (with tr). 
The scalar is then converted into an array (@_) with split.
The following while loop contains the decoding task:
8 '0's and '1's are formed into an integer and print()ed using chr().

The function mission() supplies a counter that runs from 0 to 7 using
a closure. This counter is used as an exponent to assign each bit's position 
in the number (2**0 through 2**7).

The string inside the eval function unrolls into
+2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)+
 2**&$sub*pop(@_)
with &sub returning 0..7.

The '(@_)' argument for pop() is required because of the eval (we didn't
find a way around this, if there is any).

The string containing the spaces and newlines was generated using another 
small perl script. This script is left as an exercise for the jury (or
we'll send you ours ;-)

The unobfuscated source:

sub mission{
	return sub{ $mission++%8;}
}

$sub=mission;

sub task{
	tr/ \n/01/;
	split//;
	print chr( eval '+2**&$sub * pop(@_)' x8 ) while(@_);
}

$_='    
... etc ...
  ';
task;

