Following on from The First Ten Perl Obfus, I thought it would be fun to count
down the top ten highest rated Perl Monks obfus of all time.
Since I cannot super-search by node reputation, please note that this list
is based solely on my memory of spectacular obfus I've seen over the years.
So, if I have overlooked an obfu gem, please let us know,
and I will correct the root node.
Note that, to make the top ten, a node needs a reputation of at least 240.
No 10: Fun With Reserved Keywords by blokhead Sep 11 2003 rep:200+
#!/usr/bin/perl
not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split
Constraints are the heart of obfu.
Here blokhead constrains himself to using lowercase alphabetic characters only,
no punctuation at all. Combining with an exact right hand margin
produces a visually stunning and surprising block-shaped obfu.
See also:
No 9: Mandelbrot flythrough by blokhead Feb 17 2004 rep:200+
Note that this obfu is formatted with pre tags so that the PerlMonks default
line-breaking of code at 70 characters does not spoil the visual presentation.
#!/usr/bin/perl
$r=25; $c=80;
$xr=6;$yr=3;$xc=-0.5;$dw=$z=-4/
100;local$";while($q=$dr=rand()
/7){$w+=$dw;$_=join$/,map{$Y=$_*
$yr/$r;
join"" ,map{$ x=$_*$
xr/$c;($ x,$y)= ($xc+$x
*cos($ w)-$Y* sin$w,$yc+
$x*sin ($w)+$Y*cos
$w);$ e=-1;$ a=$b=0
;($a,$b) =($u-$v+$x,2*$a* $b+$y) while(
$ u=$a*$ a)+($v=$b*$b)<4.5 &&++$e <15;if (($e>$
q&&$e< 15)||($e==$q and rand() <$dr)) {$q=$e;($d0,$d1) =($x,$
y); } chr(+( 32,96,+ 46,45,43,58,73,37 ,36,64
,32)[$ e/1.5] );}(-$ c/2)..($c/2)-1;} (-$r/2
)..($ r/2)-1;select$", $",$", 0.015; system
$^O=~m ~[wW]in~x?"cls": "clear";print ;$xc=(
$d0+15 *$xc)/16;$yc=($ d1+15*$yc)/ 16;$_*=
1+$z for $xr,$yr;$dw *=-1 if rand
()<0.02; (++$i%110 )||($z*=-1)}
This beautifully formatted obfu produces a mind-boggling visual
effect when run; you truly feel like you are flying through a mandelbrot!
Just works out of the box on both Unix and Windows.
Brilliant work. Two in a row from blokhead!
No 8.5: Propose. by Falkkin Aug 18 2004 rep:200+
#!/usr/bin/perl -w
use strict;
my$f= $[;my
$ch=0;sub l{length}
sub r{join"", reverse split
("",$_[$[])}sub ss{substr($_[0]
,$_[1],$_[2])}sub be{$_=$_[0];p
(ss($_,$f,1));$f+=l()/2;$f%=l
();$f++if$ch%2;$ch++}my$q=r
("\ntfgpfdfal,thg?bngbj".
"naxfcixz");$_=$q; $q=~
tr/f[a-z]/ [l-za-k]
/;my@ever=1..&l
;my$mine=$q
;sub p{
print
@_;
}
be $mine for @ever
Update: this one was added later after tye kindly pointed out
that I had missed this heart-warming obfu.
When run, the above obfu asks: kristen, will you marry me?
Beautiful.
Believe it or not, this was a real marriage proposal,
in the form of a Perl obfu, posted by
Pennsylvanian CMU PhD student Falkkin to fellow Perl Monk
Vortacist, aka Kristen.
To applause and congratulations all round, Falkkin's innovative
marriage proposal was publicly accepted by Vortacist just
thirteen minutes later.
As pointed out by the eagle-eyed ambrus, this touching marriage proposal
has since been immortalized in a phd comic strip.
No 8: There can be only one! by Erudil May 15 2000 rep:300+
#!/usr/bin/perl -w # there can be only one
use strict;
$_='$_={one((
one($")<<1)^one(
$/))}{{one((one($;)
<<($^=(one($/)>>1)>>1)
+1)+one($/)>>1)}{{{one(((
one($;)<<$^+1)+one($/)>>1)-$
^)}{{{one(((one($;)<<$^+1)+one(
$/)>>1)-1)}{one
(one($"))}{{one
((one($;)<<$^)^
(one($")>>1)+1)
}{one((one($;)<
<$^)-$^)}{{one(
((one($;)<<$^)-
$^)+1)}}{one(((
one($;)<<$^+1)+
one($/)>>1)-1)}
{one(($~=$=)<<1
^one($")>>1)}{{
{one((one($;)<<
$^)-one($/)-1)}
{one(((one($;)<
<$^+1)+one($/)>
>1)-$^-1)}{one(
one($"))}}{one(
one($/)<<$^+1)}
{one((one($;)<<
$^)-one($/)-1)}
{one(((one($;)<
<$^+1)+one($/)>
>1)-$^-1)}}}{{{one(((one($;)<<$^)-$^)-$^)}}}{one(
one($"))}}{one(($~=$=)<<1^one($")>>1)}}{{one((one
($;)<<$^)-(one($")>>1)+1)}{one((one($;)<<$^)-(one
($")>>1)+$^+1)}}{{one(($~=$=)<<1^(one($")>>1)+$^+
1)}{one((one($;)<<$^)-one($/)-1)}{one(((one($;)<<
$^+1)+one($/)>>1)-$^-1)}}{one($=^(one($")>>1))';s
;{one;chr;g;y;{ne}}\012\040;.rd.;sd;eval;print;#1
Following on from perhaps the best first post ever made, namely My 2 cents worth,
the master strikes again!
This one (pun intended) must surely rate as the best ever second post.
No 7: 3-D Stereogram, Self replicating source. by Toodles Oct 15 2001 rep:300+
#!/usr/bin/perl
# Copyright (c) Marcus Post, <marcus@marcuspost.com>
# # # #
$_=q,my(@f|@c|x$_=q.my(@f|@c|x$_=q.my(@f|@c|x$_=q.m(@f||@c|x$_=q.m(@f|
+|@c|xx
@w);@a=@f=<DAT%@w);@a=@f=<DAT%@w);@a=@f=<DAT%@w;@a=@f=<DAAT%@w;@a=@f=<
+DAAT%%
A>;seek(DATA|0!A>;seek(DAA|0!!A>;seek(DAA|0!A>;seek(DAA|0!!A>;seek(DAA
+|0!!AA
|0);@c=<DATA>;Y|0);@c<DATA>;Y||0);@c<DATA>Y||0);@c<DATA>Y|||0);@c<DATA
+>Y||||
until(($_=pop(zutil(($_==pp(zuttil(($_==p(zuttil(($_==p(zutttil(($_==p
+(zuttt
@c))=~/^_/){};Qc))=~/^_/){};Qc)))=~/^_/{};Qc)))=~/^_/{};Qc))))=~/^_/{}
+;Qc)))
unshift(@a|$_)xnshift(@a|$_)xnshhift(a|$_)xnshhift(a|$_)xnshhiift(a|$_
+)xnshh
;for(1..3){pri%;for(1.3){pri%;ffor1.3){pri%;ffor1.3){pri%;ffor11.3){pr
+i%;fff
nt(shift(@c));!nt(shft(@c));!ntt(hft(@c));!ntt(hft(@c));!ntt(hftt(@c))
+;!nttt
}for(@f){my($sY}for@f){my($sY}for@f){my($sY}for@f){my($sY}for@f){mmy($
+sY}foo
);split//;$_=sz);splt//;$_=sz);splt//;$_=sz);splt//;$_=sz);splt//;$_==
+sz);ss
hift(@c);$_=~sQhift(c);$_=~sQhift(c);$_=~sQhift(c);$_=~sQhift(c);$_=~s
+QQhiff
/(.{15}).*/\1/x/(.{15})*/\1/x/(.{15})*/\1/x/(.{15})*/\1/x/(.{15}})*\1/
+xx/(..
;@w=split//;fo%;@w=split/;fo%;@w=split/;fo%;@w=split/;fo%;@w=spllit;fo
+%%;@ww
r(@_){$w[$s+15!r(@_){$w[$s15!r(@_){$w[$s15!r(@_){$w[$s15!!(@_){$$w[s15
+!!!(@@
-$_]=(($w[$s]eY-$_]=(($w[$s]YY-_]=(($w[$s]YY-_]=(($w[$s]YY-_]=((($[$s]
+]YY-__
q"|")?".":$w[$zq"|")?".":$w[$zq|")?"."::$[$zq|")??."::$[[$z|")???.::$$
+[[$z||
s]);$s++;}for(Qs]);$s++;}for(Qs];$s++;}}or(Qs];$$s+;}}orr(Qs]$$s++;}}o
+rr(Qss
1..75){unless(x1..75){unless(x1.75){unnlss(x1.775){uulsss(x1.75){uuuls
+ss(x11
$w[$_]ne''){$w%$w[$_]ne''){$w%$w$_]nee''{$w%$$w$_]nn''{{$w%$$w_]nnn''{
+{$w%$$
[$_]=$w[($_-1)![$_]=$w[($_-1)![$_=$w[[($_-)![$_==w[[($$_-)![$__w[[[($$
+_-)![[
];}}print(joinY];}}print(joinY];}prinnt(joinY;}prinntt(joinY;}pinnntt(
+joinYY
""|@w);print"\z""|@w);print"\z""|w);;print"\z"|w);;pprint"\z"|w;;pppri
+nt"\zz
n";}print@a;,;#n";}print@a;.;#n";priint@a;.;#n;priintt@a;.;#n;piinntt@
+a;.;##
y!|zY\!%x!,Q!;#y!|zY\!%x!.Q!;#y!zY\!!%x!.Q!;#!zY\!!%x!!.Q!;#!z\!!!%x!!
+.Q!;##
s{Q.*\n}[]g;#<>s{Q.*\n}[]g;#<>sQ.*\nn}[]g;#>sQ.*\nn}[]]g;#>sQ.\nnn}[]]
+g;#>ss
eval;#EndFini!$eval;#EndFini!$eal;#EEndFin!$eal;;##nddFin!$ea;;###nddF
+in!$ee
__DATA__
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000110000000110000000000000000011100000000000000000
000000000001110000001110000000000000000111110000000000000000
000000000011110000011110000000000000001111111000000000000000
000000000011110000011110000000000000001111110000000000000000
000000000011110000011110000000000000001111100000000000000000
000001111111111111111111111110000000001111100000000000000000
000011111111111111111111111100000000000111100000000000000000
000111111111111111111111111000000000000111100000000000000000
000000000011110000011110000000000000000111100000000000000000
000000000011110000011110000000000000000111100000000000000000
000000000011110000011110000000000000000111100000000000000000
000000000011110000011110000000000000000011100000000000000000
000001111111111111111111111110000000000011100000000000000000
000011111111111111111111111100000000000011100000000000000000
000111111111111111111111111000000000000001100000000000000000
000000000011110000011110000000000000000001100000000000000000
000000000011110000011110000000000000000001100000000000000000
000000000011110000011110000000000000000000000000000000000000
000000000011100000011100000000000000000000000000000000000000
000000000011000000011000000000000000000011110000000000000000
000000000000000000000000000000000000000111111000000000000000
000000000000000000000000000000000000000111110000000000000000
000000000000000000000000000000000000000011110000000000000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
This original idea of creating a Perl obfu stereogram produced
rave reviews when posted.
The code is certainly mind-bogglingly clever and elaborate.
Unfortunately, I've never been able to relax my eyes enough to
see these stereogram thingos, so the (stunning if you can see it)
visual effect of this obfu was lost on me.
Though obviously a brilliant coder, Toodles only posted
four times and disappeared from PM shortly after stunning
us with his original obfu.
No 6: Saturn by eyepopslikeamosquito Oct 10 2004 rep:300+
🪐
Note that this obfu is formatted with pre tags so that the PerlMonks default
line-breaking of code at 70 characters does not spoil the visual presentation.
Update: to run, save the obfu to a file (with native newlines, \n for Unix, \r\n for Windows),
then run in a console window at least 90 chars wide by 46 deep.
#!/usr/bin/perl
;;;;;;
;;;;;;;;;;;
;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;
+$I=sub{+s+^+ ;;;;;;; ;;;;;;;;;
$"x$_[1]+gem;$/x$_# ;;;; ;;;;;;;;
[0].$_.$/};$W=sub{$~=!q~ ;;;;;;;
~.pop();system($^O=~Win?ClS:# ;;;;;;;
'clear'),print,select$Z,$Z,$Z,!" ;;;;;;
"||$~for@_};$H=sub{+join$/,map($_# ;;;;;;
x$_[0],pop=~m-.+-g),!_};$_=!Mima,s-- ;;;;;
"@{['=9+)w'^RINGS]}\%;local@{[Saturn^# ;;;;;
wNXIBP]}"-see;s-^#!..+?$/(?=$"+;)--is ;;;;
y-;-'-;s-\w-~-gi;$S=$_;#--Beautiful] ;;;;
@S=m-.+-g;$N=1+.6-!th_,$--=-82-$--- ;;;
$_.=$"x-(y---c-$-)for@S;$R=sub{$i# ;;; -d
=0;join$/,map{$j=$%;join!_,grep# ;;; Rhea
!($j++%$_[$%]),m-.-g}grep!($i# ;;; -Titan
++%$_[0]),@S};$L=join!_,map# ;;; -Huygens
~~reverse.$/,@S;@R=(&$I(q- ;;; -&&20,051,
$_=_^q-q-),&$I(20,41-!q- ;;; -,$_=F|K),$
I->(15,31,$_=&$R(4-!q- ;;; -)),&$I(13-!"
;;",28,$_=&$R(3)),&${ ;;; _^_^I}(10,20-!"
;;;;;",$_=$R->(2)),q- ;;; -&&$S);@O=map&{"
;;;;;; "&&$H}($_,&${ ;;; R.!-_}($_))x$_,!"
;;;;; "+2..2*~~2 ;;; @Y=reverse@R#Dione
;;;;;; &${m-- ;;; S|A|T|U}(@R,$N)||!q-
;;;;;;; b- ;;; &$W(@O[0,1,2,1,0!=!q-
;;;;;;; ;;;; -],!1!~~1);&$W($S.!q-
;;;;;;;;; ;;;;; -,$L,0.16)for$%..5+!q-
;;;;;;;;;; ;;;;;;;;; Cassini-;&{$W||q-
;;;;;;;;;;;;;;;;;;;;;; -}(@Y,1.6)
;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
;;;;;;;;;;;
;;;;;;
Ahem. This is mine.
I am a space nut and had just finished watching Contact.
I was deeply moved by the opening sequence of that movie,
starting from the Earth, moving past Mars, Jupiter, Saturn, ...,
the Milky Way, the Local Group, until the vast scale of the
Universe and its billions of galaxies is slowly revealed.
The other primary influence was Erudil's famous camel code,
which splits a camel into four camels.
I naturally tried to top that,
splitting Saturn into four, then nine, then sixteen Saturns,
adding a back and forth tilting effect for good measure.
Luckily, I was also playing a lot of golf at the time,
which was needed to compress the desired code into the Saturn shape.
Once I had done that, I set about tweaking the code
to match the Saturnian theme. For example:
$_=!Mima,s--
'=9+)w'^RINGS
Saturn^wNXIBP
S|A|T|U}(@R,$N)
I derived the Saturn shape from
this beautiful Voyager space probe photograph.
No 5: spiraling quine by Len Jun 20 2002 rep:300+
Unix version:
#!/usr/bin/perl
$_='
$q ="\ 47"; wh
ile ($ ;=
$z += .5 ){
%c= $r=0;$/ ="";whi le(2
0+ $z>($;+=.05)){$c{int$ _+ 2
6+ 2*($ r+= .0 2) *
s in$ ;}{1 -$_
+1 0+ int $r*c o s
$ ;} =1for(0. .1) }$
t =r ever se;$ /. =`
c le ar `. " #!
/ usr /bi n/ pe
rl \n\ $_ =$q \n" ;
fo r$y (1..20){$c{$_} {
$ y }? $ /.=chop$t :
($/ . =" \4
0") for(0. .53) ;
$/. ="\n"}pri nt"$/$ q;
s; ". chr(9 2)."s;;g;eval\n "}
';s;\s;;g;eval
Windows version:
#!/usr/bin/perl
$_='
$q= "\4 7"
;wh ile($;=$z+=.5 ){ %c
=$r =0;$/="";while( 21+$ z> (
$; +=.05)) {$c{i nt $ _+
26 +2*( $r+=. 0 1
9 )*s in $; }{1
- $_ +10+int$r*c os$; }=1
f or(0..1)}$t=re v e r s
e; $/. =`cl s` ."
#! /u sr /bi n/ pe
rl \n\ $_=$q\n" ;f or
$y (1. .20){ $c {$
_ } { $y }? $
/.= chop$ t:( $/
. ="\4 0")for( 0..53 );
$ /.=" \n"}system("cls ")
;p ri nt "$/$q;s ;".
c h r(92) ."s;
; g; eva l\n" }
';s;\s;;g;eval
A beautifully formatted obfu producing a dazzling visual
effect when run. Well done Len.
No 4: find-a-func by Erudil Aug 29 2001 rep:300+
#!/usr/bin/perl -w # find-a-func
use strict;
$_='$;="per
l";map{map {s}^\s+}}
;$_{$_}++unless(/[^a-
z]/)}split(/
[\s,]+/)i
f(/alpha.
*$;/i../w
ait/)}`$;
doc\040$;
toc`;;;@[=k
eys%_;$; =20;$:=15;;for(0..($;*$:-1 )){$;[$_]="_"
;}until($%++>3*$;||@]>2*$:-3){@_=split(//,splice(@[,rand(
@[),1));if(3>@_){next;}$~=int(rand($;));$^=int(rand($:));
$-=$~+$^*$;;my$Erudil=0;{if($Erudil++>2*$:){next;}$a=(-1,
0,1)[rand(3)];$b=(-1,0,1)[rand(3)];unless(($a||$b)&&$~
+$a*@_<=$;&&$~+$a*@_>=0&&$^+$b*@_<=$:&&$^+$b*@_>=0){re
do;;}my$llama=0;;for(0..$#_){unless($;[$-+$a*$_+$b*
$;*$_]eq$_[$_]||$;[$-+$a*$_+$b*$;*$_]eq"_"){$llam
a++;last;}}if($llama){redo;}push@],join("",@_);f
or(0..$#_){$;[$-+$a*$_+$b*$;*$_]=$_[$_];}}}@_
=sort@];unshift@_ ,"Find:","-"x5;for$a(0.
.$:-1){for$b(0. .$;-1){$~=("a".."z")
[rand(26)];$_ ="$;[$a*$;+$b]".
$";s;_;$~; ;print;}$_=s
hift@_|| $";;print$
",$", $_,$ /;$_
=shi ft@_ ||$
";pr int $"x
$;, $"x $;,
$", $", $_
,$/;; ;}' ;;;
s[\s+] $$g; eval;
__DATA__
The use of the llama image in association with Perl is a trademark
of O'Reilly & Associates, Inc. Used with permission.
Needs "perldoc" on the path.
Can be quite slow to run as it mangles the output of "perldoc perltoc",
but well worth the wait.
Full deconstruction provided by grinder.
Another Erudil classic.
No 3: How to (ab)use substr by Erudil May 03 2001 rep: 400+
#!/usr/bin/perl -w # how to (ab)use substr
use strict;
my $pi='3.14159210535152623346475240375062163750446240333543375062';
substr ($^X,0)=
substr ($pi,-6);map{
substr ($^X,$.++,1)=chr(
substr($pi,21,2)+
substr($pi,$_,2))}(12,28,-18,-6,-10,14);map{$^O=$"x(
substr ($pi,-5,2));
substr ($^O,sin(++$a/8)*32+
substr ($pi,-2)/2+1,1)=$_;
substr ($^O,sin($a/4)*(
substr ($pi,2,2))+
substr ($pi,-7,-5)-1,1)=$_;print"$^O$/";eval($^X.('$b,'x3).
substr ($pi,-3,1).'.'.
substr ($pi,9,2));}(map{chr($_+
substr ($pi,21,2))}(
substr ($pi,8)x3)=~/../g);
Yet another Erudil classic.
A work of art.
No 2: Things are not what they seem like. by Abigail Jul 13 2000 rep:400+
$; # A lone dollar?
=$"; # Pod?
$; # The return of the lone dollar?
{Just=>another=>Perl=>Hacker=>} # Bare block?
=$/; # More pod?
print%; # No right operand for %?
Short. Elegant. Witty. A masterpiece from the inimitable Abigail.
Deconstruction provided by btrott.
No 1: camel code by Erudil Dec 06 2000 rep:700+
#!/usr/bin/perl -w # camel code
use strict;
$_='ev
al("seek\040D
ATA,0, 0;");foreach(1..3)
{<DATA>;}my @camel1hump;my$camel;
my$Camel ;while( <DATA>){$_=sprintf("%-6
9s",$_);my@dromedary 1=split(//);if(defined($
_=<DATA>)){@camel1hum p=split(//);}while(@dromeda
ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif
t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;}
$CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){
$camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift(
@camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\
064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse;
print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y
/LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/;
$_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval
("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s
;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124
\1 50\145\040\165\163\145\040\157\1 46\040\1 41\0
40\143\141 \155\145\1 54\040\1 51\155\ 141
\147\145\0 40\151\156 \040\141 \163\16 3\
157\143\ 151\141\16 4\151\1 57\156
\040\167 \151\164\1 50\040\ 120\1
45\162\ 154\040\15 1\163\ 040\14
1\040\1 64\162\1 41\144 \145\
155\14 1\162\ 153\04 0\157
\146\ 040\11 7\047\ 122\1
45\15 1\154\1 54\171 \040
\046\ 012\101\16 3\16
3\15 7\143\15 1\14
1\16 4\145\163 \054
\040 \111\156\14 3\056
\040\ 125\163\145\14 4\040\
167\1 51\164\1 50\0 40\160\
145\162 \155\151
\163\163 \151\1
57\156\056
The highest rated PM node of all time
(update: while the most upvoted PM node of all time belongs to another legend, paco, as described here).
For a long time, you could buy thinkgeek T-shirts with the above camel-shaped obfu screen-printed on them!
They seem to be out of stock now though, at least the thinkgeek link is broken.
I loved Erudil's response to all the attention:
<Elvis> Thankyew ... Thankyew verra much! </Elvis>
References
Updated Dec 18 2014: Added obfu 8.5 which I had missed in my original post (thanks tye).