Solution to:

    #/usr/bin/perl
    $~=~s~o~unpack qq,\l$',,q,:<')I;G0@(E1H92!097)L($IO=7)N86Q<;B(`,~eei

... submitted for the category 'The Perl Journal' to the 3rd Annual
Obfuscated Perl contest.

The program uses non-standard delimiters for the s//, qq{} and q{}
operators. If we replace them with the standard delimiters and add a little
whitespace, we have the following:

    $~ =~ s/o/unpack qq{\l$+}, q{:<')I;G0@(E1H92!097)L($IO=7)N86Q<;B(`)} /eei

This makes it easier to see that we have a case-insensitive substituion,
using two iterations of the eval switch /e, on the Perl variable $~ (the
name of the current report format, whose default value is 'STDOUT').

The substitution matches the 'O' in 'STDOUT' and leaves 'UT' in $' (the
text follwoing the last match). When "\l$'" appears in the double-quote
operator on the right side, the \l modifier lowers the case of the first
letter, yielding 'uT'.

The right side of the substitution is then eval'ed the first time, as an
unpack statement using 'u' as the template on a string which just happens
to be the uuencoding of 'print "The Perl Journal\n"'. That result is then
eval'ed again. Vila!


Best,
Geoff Simmons
<gs@cityline.net>
