This is the solution to an entry for the 3rd Annual Obfuscated Perl Contest, written by Adam Spiers and Chris Cladingboel . Firstly, please refer to the accompanying PROBLEMS file, which contains a brief description of the whitespace encoding. The program essentially does this (the order in the actual code was swapped round to hinder clarity): - uudecode $shift and store the first 11 numbers in @oh. - Alias $5, $7 and $8 to `(.', `(..' and `(...' respectively. - Open the script, read in the first line, and extract the word `perl'. Store in $0 for later use. - Alias $9 to `\u'. - Split the non-uuencoded part of $shift on ! characters into @shift. - Alias $= to $\, and set both it and $# to the empty string. - Do various completely irrelevant stuff with $qq and $ee, in the hope that at least one person will think that their occurrences in the final substitution indicate foul play, and that at least one other person finds it mildly amusing. - Set the __WARN__ and __DIE__ signal handlers to point to &marine. - eval() some horribly broken code which generates several warnings/ errors. Each warning/error gets its nth word extracted (where n is the next offset shift()ed off @oh) and concatenated to $=, along with a corresponding bit of punctuation/code from @shift. - Assign $= to $eval and perform a small substitution. - Reset $= to the empty string (undefined). - $eval now contains yet more horribly broken code fragments, this time delimited by `+'. Split them up, and map eval() onto each one. - Again, the error handler extracts certain words from each warning/ error, although no punctuation/code is interpolated in between each word this time. - Finally, do a horrendous substitution using some of the previous aliases, which swaps a few of the letters around, includes `perl' from $0, and uppercases each word, to obtain `The Perl Journal'. We learnt a lot about quoting through writing this substitution! - Print out a number, which actually prints out `The Perl Journal' rather than the number. Too easy? Well it wasn't that easy to write! I've left decoding what the actual error messages were and why the broken bits of code generated them to the reader, to ensure that noone fully understands it all without putting *some* effort in :-) P.S. The meaning behind the Y2K comment was simply that as soon as Perl's internal diagnostics change sufficiently (which will almost certainly happen before 2000), the program will break horribly.