http://qs1969.pair.com?node_id=294798

This should theoretically be fairly portable, but I've only tested it on 5.6.0/Linux and 5.8.0/ActiveState. If you don't like the first joke it gives you, run it some more times and you won't like the other ones either ;-)

$|++;;($;,$:,$,,$\,$^,$==>$~,$.,$})=("Izntvar n", "Prey pbqr","fpevor"=> "!$/","ernql"=>$^F, "boshfpng","fho",join ' ',@{;;[_(qw(oepgnf rhnuar nfarqr gu))]} [2,$?,3,$|,@;,5]);sub ::{;my$i=$^;;[split /#/,join$`,map{$i^=$_} split//,pop@_]}@%= map{my$die=$_;sub{print for join$',@$die[ $%,$==>$|]}}map{[map{sub {my$i=$!;join$&, map{my$o=$i;$i=$_;$o^$_;} split//,shift}; y;a-z;n-za-m;;$_;}@$_];}([ q"Ia Sbivrg ", "rf lbh","Rhffvn, $: $~"],[ "Ayy lbhe $~" ," ner orybat gb hf","rq $:" ], ["$; orb" ,"rq $:","jhys pyhfgre bs $~" ],["$|. We" .'v'."gr $~","$/3. Pebsvg","r" .qq-q-.' ' .$:.".$/$=. ???"],["Tur arkg ". "$: $~"=> "ef $} vg"." rneyl",q"vba jvyy " .'or'.qq ' $^ fbba, ohg $.$,'] );%_=map {my$z=( ($_|=$^O)?$_:::($_)); $_,sub{ while( pop){my$x=unpack'V',$_ ;push@| ,($x> $_?$x:$_)}print for@|}} 1..1024; ;sub _{+(@;=>@:)=map{[split//]}@_;for(1..9 ){push@:,join$&,map{shift@$_}@;}@:}$%[rand@%]->()
update: code below this point is my signature and is not part of the above obfuscation. I've reworked the sig to start with a semicolon in case someone uses them together, but that was not the intention.
update2: corrected spelling error

;$;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()} }split//,".rekcah lreP rehtona tsuJ";$\=$ ;->();print;