Got some code which would take a Perl grand master to understand without running it? Post it in this section so we can stare at it in awe.

Word of warning, though: Don't be too cocky with your post — almost inevitably someone will post a reply that does the exact same thing in even fewer characters!

New Less than Readable Code
ACA JAPH
2 direct replies — Read more / Contribute
by goibhniu
on Aug 18, 2007 at 05:28

    Ok, this is my first japh. I haven't got it down to four lines, but 5 is almost 4 for really small values of 5.

    If you don't want clues, don't look up the ACA. I put it in the title because I wanted it to be more personal than "My first JAPH", but I didn't want to put too much in the title for those who have fun with de-obfuscating.

    @ca=(sub{@kp=split(//,shift);$c=shift;$p2{' '}=' ';$C2{' '}=' ';foreac +h(@kp, 'a'..'z'){if(!exists $p2{$_}){$k=chr(ord('A')+(($a++)+$c)%26);$p2{$_}= +$k; $C2{$k}=$_;}}},sub{$t=shift;$h=shift;foreach(split(//,$t)){$r=$r.($$h{ +$_});} return $r;});$ca[0]->('thequickbrownfoxjumpsoverthelazydogs',10);print + $ca[1]->('ZOCK FWUKLMT BMTE LFQR',\%C2)."\n";


    I humbly seek wisdom.
first obfuscation
1 direct reply — Read more / Contribute
by m0ve
on Aug 17, 2007 at 07:01
    here's my first try on obfuscation
    maybe i got to much time at work ;)

    $_="What is this?" ;my@t=unpack("C*",$_);my@ o;$o[0]=$t[0]-$t[12]+$t[9]-$t [6]+$t[2]+$t[9]-$t[10];$o[1]=$t[3] +$t[8]-$t[1]-$t[12]+$t[0]-$t[6]+$t[8]-$ t[10];$o[2]=$t[12]+$t[7]+$t[8]-$t[9]-$t[10] +$t[3];$o[3]=$t[9]-$t[12]+$t[9]-$t[7]-$t[8]+ $t[9];$o[4]=$t[8]-$t[0]+$t[6]-$t[10];$o[5]=$ t[6];$o[6]=$t[7];$o[7]=$t[10]+$t[9]-$t[12] -$t[7]-$t[8]+$t[9];$o[8]=$t[5];$o[9]=$t[3 ]+$t[8]-$t[12]-$t[0]+$t[4];$o[10]=$t[6];$ o[11]=$t[3];$o[12]=$t[7];$o[13]=$t[0]-$t[ 12]-$t[6]+$t[2]+$t[10];$o[14]=$t[9]-$t [12]-$t[7]-$t[8]+$ t[9]+$t[9]+$t[9] -$t[ 12]-$t[7]- $t[8]+$t[9 ];$ o[15]=$t[9 ]+$t[10] -$t[12]-$t [7]-$t[8]+$t [9];$o[16]=$t[3]+$t[8]-$ t[11] ;$o[17]=$t[6];$o[18]= $t[9]-$t[12]-$t[7]-$t [8]+$t[9]+$t[9]+$t[9 ]+$t[10]-$ t[12]- $t[7]-$t[8 ]; $o [19]=$t[2] ;$ o[ 20]=$t[3];$o[21]=$t[9]+$t[10]-$t[9];$o[22]=$t[0]-$t[12]-$t[6]+$t [2]+$t[10];$o[23]=$t[0]-$t[12]+$t[9]-$t[6]+$t[2];print pack ("C*",@o);
small sig line
2 direct replies — Read more / Contribute
by dbw
on Aug 15, 2007 at 14:40
    I've been looking for something short and sweet to put in my signature and I came up with this. It's not exactly an obfuscation, just a fairly dense bit of code. It prints something (IMO) more interesting than JAPH.
    /usr/bin/perl -le'X:for(my$x=1;;){$x%$_||next(X)for(2..$x++);print$x}'
    It can use strict and warnings without further modification and it's only 70 columns wide, so it fits most places. What do you think?
Fractal Generator
3 direct replies — Read more / Contribute
by my $self
on Aug 15, 2007 at 11:25
    for ($k = 1.2 ;$k >- 1.2 ;$k-=(2.4 )/40){ for ($j=-2.1 ;$j <.7 ;$j +=2.8 /100) {($x, $y, $i )=($j, $k, 0); + while (sqrt( $x** 2+$y + **2) <2 && $i<200) {($x ,$y )=( $x**2 -$y** 2+ $j,2 *$x*$y +$k ) ;$i++ ;} print ($i <12?( $i <4?($i <2? '#': + '%'): ($i <8?'&' :'*' )): ($i<50 ?($i <20? '+':'-') :( $i<80?',' :($i< 190 ?'.':' ') ))) ;} print"\n" ;}
    Draws a Mandelbrot fractal in the terminal
First JAPH
2 direct replies — Read more / Contribute
by johnlawrence
on Aug 02, 2007 at 11:00
    Planning: 20 mins
    Coding: 10 mins
    Formatting: 90 mins!

    At least it killed time on a long flight!

    $_="Who am I?"; my@f=unpack("C*",$_); $f[9]=$f[3]+$f[6]+$f[7]- $f[8];$f[25]=$f[5]-$f[9]+$f[7] ;$f[10]=$f[2]+$f[2]-$f[1]-$f[9]+ $f[7];$f[17]= $f[12]=$f[10]+ $f[7]-$f[9]; $f[11]=$f[12] +$f[7]-$f[9]; $f[26]=$f[21] =$f[13]=$f[3] ;$f[28]=$f[14] =$f[3]+$f[6]+ $f[13]-$f[7] +$f[9];$f[15] =$f[5]+$f[9] -$f[7];$f[16] =$f[2];$f[27] =$f[18]= $f[1];$f [31]=$f[ 23]=$f[19]=$ f[2]-$f[4]+$ f[0];$f[32] =$f[24]=$f[20] =$f[11]+$f[7]- $f[9];$f[22]= $f[10]+$f[10] +$f[10]-$f[0] -$f[0]-$f[14] ;$f[29]=$f[4 ]+$f[10]-$f[ 11];$f[30]=$ f[10]+$f[ 0]-$f[4]; print pack ("C*" ,@f[9 ..32]);
Fractal Japh
9 direct replies — Read more / Contribute
by liverpole
on Jul 28, 2007 at 21:40
    A few months ago, I was in the middle of another Perl project, and on an impulse took time out to try something new.  As is often the case, I didn't expect it would take more than a few days to finish it.

    Many weeks later, I have this obfuscation to show for it:

    use Tk ; ($ "= q \$ +; W) i(s -9o ),B )$,} n$ p90)=2+$ m$sdnr 0,;/)$,=w uo,ix+((; E,s)bw$ n3&" -())h=N -ot/9x?$} ?i(A>,fg 0"[xp (f"{n$"; ,e0,u$t" meP#$4q-$ s1|,yw," J5$9yhe|J( ;$ .=,Z])@q3 ($ $O"~9)+=B" ;1fM,%s0&)(,*@,,-$0/ :&($H"F4$>k2#2n[v()=)t a)xp4e:,$?@))f="/0xx $b$A;=t@x1,t]I,2Rm@e$3 0-;?)$:Ga_r_,09i)} B1Vp;(;A,0f(},/;{$1$(2 :(-$$$@(f0V041" ?Me2F"+0-,02.[-,:="r=>2 ,0"0>$1sea>d 5 7,e-uF;pqnse52-q9p,$l$dul ):3$]d1liW(b e,20Z+a)=t)${tA8:))t;("otd e(04{?e($&r -o(0,0p/($U"$${$,-,u;)b=,W f$k 27-s(;,~".) V)5 26h"$$/9=}=;5x0@:HB^0"s$f)4 :B";)(,,uMo,/6,e p=[3" b-rAg0Hqu(a6;N>((;,($s$-0 $PC$0$-$shez,W {aj,J6 b) @,]9.mn=2 =0,aS$+0=yv05~ :$n,F):s(a;5s 4B d$)/6p $s$ )/0,(H}i0 rq (j;#,$$;(), i,-<@h-cPp0?-n$h@_/3,,u.09 treA=80$$s.:0f ),;s0 :Cd h@$:"=6$p,7,)@UU6%@4jl301=I-;0d_0+i2,)(,1$ ,*;,+t0 9;1 $)r9%(-)",0n,A}=0.$w{,6:e$}(s:3ri$"01xP@0 q1f*, Z,:4t)F.r2"c6=$20};;.t0,o4$J4,$$p@(,Js0A;0 +sPrA$9($,[$,&=|i-s00q-$x-3$|n1*:,,bj=66c= t)$63$g]$00-1$}s06r=;Xx,$;/@+,0*>$=54bw; $$-)s"bs/5;h&HS9,ib=hg,$i_;*0Anl$i;9Sl( $$:($anf$0=e2MS6.qc+tT:$()-)02)k(;=2C$;> ;,,}"$$J4-Pmu$-.s)jy(0$-apq95u-/=1,B-p d=0)b>@$ ,-;){aa:}NpAz59@{$tt1(Ha )= )0U$Yea81{c*6;:=g=(n0.$k (4@6s+s)2,.Q;$0r0p=h;(-$=mP- =,l$i$$9wpa-sm-iufHS0)op$ha9 t;t=,:;p{nip0((@[$6$;()f {: "$C@s0W[$;t$8,D;B),.@J$ ;_0",$]; -=_,B$},,$H}$9",$=H(9$E=}G0,$A$=00Z)s@= :+V)o[.:)=hI$6"-=+].8;Pi;q0;>s(;$0m(f@* ,$cp$$T,a(tS59grljg-9p1@=70[ei/=10{8S@.: $at@0):$0;I21pt"A;;8U+$=98]e=)f@0=$h(50 =L"*og,$g=)7,$i;(r=-U)$;i+Wn$$((9[/_&f&}eJO @"0$5;_!3((=-_.:_7$($51@~$)"6].K3_0._so{)0; 2=);,. ,/)ix,i9$;$3J-#;f$-f5m$G6(ft$(T9(7;V-01i /c" ;0",w- =,,l8=+$:+$h>$7$l0$"L2"dipl5L=,ne=4e)la;:) >1+ q(0q;e c(2)$7($5,$((k $5;Y6(_>-U$$FD0$,,$)$9)vK o,,A-6j{T0 {, -r$-|w0+p ):( $-gE7| i: 1u?6$I)e)5=d4) s$0e){t=:jt8/h T,,=&}P9oh 0@ @:-$(_ w(0i=,A$59F$(h$ ,n>-)H;0)x.iG-"$1*,m:=-5l/ 7!Q2( Ha8($)e55")0$(p0 $D;+7:,]xP${,c,@1.2@}2-x$9 ,$ A}25gs/$,p0 $y = )90;ugn$=:C+s;5,wb;)ys8)$pM 7 -aN$;,p0}El a,1r_J$$l,e)ii$0n{=CXi9l; tnI5"s~=,c0s p(L*:Aes$$e:eu"o$4ll/oz(8{ s! or5ge#+,@0$ h"p),=cs(2r,I@,;;-$t/( ),+=$$s(7A$1$; J"(Hhu$5$a3jl(i$,)be: /,0+a1fUH;N,9"$,1s ,!=(mJ$0;a1)t@@~$y{F,p, 3/}rFsx@i)7u$0@();, , Bn=5sa,A$-$($=t(:h,9)u 1M[y(($8@$0*,,=*,)A b0C _:($ 1M/ $;(+,,[3 $s )a]vm@$7$0 8O,;i),a _D5Y]0-$( n ($p),:=} , $P$W.I{\ )=~s"[ $/ ]""g ;map{$h{$_} .=substr $",0 ,1,""} split//, crypt(qw/ FRaCtal: /, q+rp +)x160; $_=join //,map {$h {$_ }} sort keys %h ;s /N / /xg; eval #l iv er po le

    The purpose of the program (if peek you must) is ...


    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
The Joy of Overpunctuating
No replies — Read more | Post response
by mr_mischief
on Jul 24, 2007 at 18:29
    #!/usr/bin/perl -w #justanotherperlhacker use strict; open*_,$0;<_>; (y,#,,d,s,t,t ,,s,r,r ,,s,l,l ,,y,j,J,,y,p,P,,s,$,.,,print,goto'') for<_>


    ... and another happy little comma lives over here.

    Not particularly obfuscated, but I think it's enough to initially confuse someone who isn't paying attention. It does use a few fun tricks, though, and it passes warnings and strictures.
Quine generator
3 direct replies — Read more / Contribute
by Anonymous Monk
on Jul 16, 2007 at 02:34
    Not exactly on obfuscation, but I didn't know where else to put it... Warning: neither __END__ nor @data can be used anywhere in the programs in question, lest it will fail.
    #!/usr/bin/perl use strict; use warnings; die("File does not exist.\n") unless -e $ARGV[0]; open(QUINE, "+<", shift); my @quine = <QUINE>; push @quine, 'my @data = <DATA>;'."\n", 'print @data, @data'."\n", "__END__\n"; push @quine, @quine; seek(QUINE, 0, 0); print QUINE @quine; close(QUINE); my @data = <DATA>; print @data, @data __END__ #!/usr/bin/perl use strict; use warnings; die("File does not exist.\n") unless -e $ARGV[0]; open(QUINE, "+<", shift); my @quine = <QUINE>; push @quine, 'my @data = <DATA>;'."\n", 'print @data, @data'."\n", "__END__\n"; push @quine, @quine; seek(QUINE, 0, 0); print QUINE @quine; close(QUINE); my @data = <DATA>; print @data, @data __END__
Fibo Golf challenge on 3 monkeys
5 direct replies — Read more / Contribute
by RMGir
on Jul 13, 2007 at 08:32
    Over on the 3monkeys blog, they've posted a challenge to golf down the calculation and display of the first 20 fibonacci numbers.

    I only got it as far as:

    perl -e'@p=(1,1);map@p=(@p,$p[-1]+$p[-2]),A..R;$\=$,="\n";print@p'
    I'm sure someone here can do much better...

    Mike
next in a post-fixed for
2 direct replies — Read more / Contribute
by Codon
on Jul 06, 2007 at 13:59

    This may be better posted in Meditations. It sort of touches on both ponderings and obfuscations. I was prototyping an algorithm the other day when I developed a rather obfuscated method for building a hash from two lists. While this is not exactly a full "obfu", I certainly think the behavior could be incorporated into a full obfu. This seems to actually get in to the "what the heck is happening here?" as ysth, gryphon, and especially diotalevi have commented on perverseness of the construct. Without further ado:

    push( @{ $y{ ($a = $_, ( grep {$a=~/$_/} @t )[0] || next)[1] } }, $_ ) + for @f;

    The intent of this code is to take a list of patterns and a list of strings and group the strings based on pattern. It also needed to disregard any string that did not match any pattern.

    In larger context, this line came from a bit of prototype code I was working on that was

    use strict; my @t=qw(one two three); my @f=qw( one.ind.01 one.ind.02 one.tab.01 two.ind.01 two.tab.02 two.ind.02 three.ind.02 three.ind.01 three.tab.03 four1.ind four2.ind four2.ind f1v.ind.31 f1v.ind.32 f1v.ind.32 ); my %y; push( @{ $y{ ($a = $_, ( grep {$a=~/\b$_\.ind/} @t )[0] || next)[1] } +}, $_ ) for @f;

    All monks previously mentioned (as well as others), were immediately revolted by such "offensive" code. diotalevi went on to say "Please tell me that you have never committed any code that actually looked like that!" He then went off to try to decipher how it actually worked. I do not think he ever found a satisfactory answer other than the next is a near-no-op with stack manipulation.

    The line in question can be re-written in a much more verbose way:

    So, what are the thoughts of other monks regarding this obscure construct? Perhaps more importantly, what does the Perl development community say about the behavior (both internal and external)? Is this asking for a future incompatibility? Is it firmly grounded or did I stumble on something that should not work?

    Ivan Heffner
    Sr. Software Engineer
    WhitePages.com, Inc.

Set the new obfuscation standard
Title:
code@?#!:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":


  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.