http://www.perlmonks.org?node_id=1597

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
Emoji can be hard to see on the command line
1 direct reply — Read more / Contribute
by kcott
on Feb 06, 2021 at 14:16

    ++eyepopslikeamosquito's post (a reply in an unrelated SoPW thread) inspired me to look at Acme::EyeDrops.

    After playing around with that module for a bit, I realised that some of the obfucation code images looked a bit like blown-up versions of emoji. It then occurred to me that not only could I get large, very easy to see, representations of emoji, but I could also use those images to get back the original Unicode® emoji character. Here's a couple of examples.

    Firstly, a very straightforward one that only required one shape.

    $ perl -C -e 'print "\x{1f56f}\n"'
    🕯
    
    $ cat candle.txt ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( '' ) ) ))) ) ) ) ) ) ))))) ) =~("\(". ( ( '?')).'{' . ( ( '`')|'%') .('['^ ( '-') ) . ( '`'|'!') . ('`'|"\,"). '"'.('['^"\.").( '['^'(').('`'|('%')).( '{'^'[').('`'|'/').(('[')^ '+').('`'|'%').('`'|'.').( '{'^'[').('['^'*').("\["^ ',').'\\'.'{'.':'.(('[')^ '(').('['^'/').('`'|'$').( '{'^'[').':'.('`'|'%').('`' |'.').('`'|'#').('`'|"\/").( '`'|'$').('`'|')').(('`')| '.').('`'|"'").'('.(('{')^ '.').('{'^'/').('`'^'&' ).'-'.(':'&'=').')'.''. '\\'.'}'.';'.('!'^'+'). ('['^'+').('['^(')')).( '`'|')').('`'|'.').('[' ^'/').('{'^'[').('\\'). '"'.'\\'.'\\'.('['^'#') .'\\'.'{'.('^'^('`'|'/' )).('`'|'&').('^'^('`'| ( '+'))).('^'^('`'|'(')). ('`'|'&') .'\\'.'}'.'\\'.('\\').( ( ( '`'))|('.')). '\\'.'"'.';'.('!'^'+'). ( '"')."\}". ')');$:='.'^"\~"; $~='@'|'(';$^=')'^"\["; $/='`'|'.';$,='(' ^+ '}';$\='`'|'!';$:=')'^'}';$~='*'|'`' ;$^='+'^'_';$/="\&"| (( '@'));$,='['&'~';$\=','^'|';$:='.'^'~';$~='@'|'('; ($^) =')'^'[';$/='`'|"\."; $, = ( ( ( '(')))^"\}"; $\='`'|'!';$:= ')'^'}';$~='*'|'`' ;$^='+'^'_';$/='&' |(( '@' ));
    $ perl -Mre=eval candle.txt
    🕯
    

    And a tad more complicated one that required two shapes.

    $ perl -C -e 'print "\x{1f459}\n"'
    👙
    
    $ cat bikini.txt ''=~('('. '?'.'{'.( (( (( (( (( (( (( (( (( (( (( ( (( (( (( (( (( (( (( (( (( (( (( (( ( (( (( (( (( (( (( ( ( (( ( (( (( ( (( (( (( ( (( (( (( ( ( (( (( ( (( (( (( (( ( (( ( (( (( ( (( (( (( (( '`' )))) ) )) )))) ))))) )) )) )))))) ))))))) )) )) ))))))) ))))))))) )) )) ))))))))) ))))))))))))) ))))))))))))) ))))))))))))) ))))))))|'%'). ('['^'-').('`'| '!').('`'|"\,"). '"'.('['^'.').('['^ '(').('`'|('%')).( '{'^'[').('`'|"\/").( '['^'+').('`'|('%')).( '`'|'.').('{'^'[').("\["^ '*').('['^',').'\\'.('{'). ':'.('['^'(').('['^('/')).( '`'|'$').('{'^'[').':'.("\`"| '%').('`'|'.').('`'|'#').('`'|'/').('`'|'$').('`'|')').('`' |'.').('`'|"'").'('.('{'^'.').('{'^'/').('`'^'&').('-').( ':'&'=').')'.'\\'.'}'.';'.('!'^'+').('['^'+').('['^')') .('`'|')').('`'|'.').( '['^'/').('{'^('[')). '\\'.'"'.('\\'). '\\'.('['^'#'). '\\'.'{'. ('^'^('`' |'/')).('`'|'&').('^'^('`'|'*')).('^'^('`'|'+')).((';')& '=').'\\'.'}'.'\\'.'\\'.('`'|'.').'\\'.'"'.';'.('!'^'+') .'"'.'}'.')');$:='.'^'~';$~='@'|'(';$^=')'^'[';$/=('`')| '.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`';$^="\+"^ '_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~';$~="\@"| '(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:="\)"^ '}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\ =','^'|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/ ='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^ '}';$~='*'|'`';$^='+'^'_';$/="\&"| '@';$,='['&'~';$\=','^"\|";$:= '.'^'~';$~='@'|'(';$^=')'^ '[';$/='`'|'.';$,=('(')^ '}';$\='`'|'!';$:=')'^ '}';$~='*'|('`');$^= '+'^'_';$/='&'|'@' ;$,='['&"\~";$\= ','^'|';$:='.' ^'~';$~=('@')| '(';$^="\)"^ '[';$/="\`";
    $ perl -Mre=eval bikini.txt
    👙
    

    In case you were wondering why one is coloured and the other isn't: CANDLE (U+1F56F) does not have the Emoji_Presentation property, so it defaults to text style; BIKINI (U+1F459) does have that property, so it defaults to emoji style. If this interests you, see "Text vs Emoji, v13.1" for specific information, and "Unicode Emoji Charts v13.1" for links to more general discussions.

    Finally, in case it wasn't obvious, this was intended as a bit of tongue-in-cheek fun. My eyesight is not so poor that I need foot-high images to tell one emoji from another. 👁️ 😕 👓 😃

    — Ken

Making a point on LinkedIn about Perl;
No replies — Read more | Post response
by ait
on Jan 11, 2021 at 14:57
    eval eval '"'. ('['^"\+").( ('[')^ ')').('`'|')'). ('`'|'.'). ('['^'/').('{'^'[' ).'\\'.'"' .('{'^ '+').('`'|'%').('['^ ')').('`'|',').('{'^ '[').('`'|')').(('[')^ '(').('{'^'[').("\{"^ '/').('`'|'(').('`'|'%' ).('{'^'[').(('{')^ '(').('`'|'(').('`'|')').( '['^'/')."\!". '\\'.'\\'.('`'|'.').'\\'.'"'. ';'.('!'^'+'). '"';$:='.'^'~';$~='@'|'(';$^=')' ^'[';$/='`'|'.' ;$,='('^'}';$\='`'|'!';$:=')'^"\}"; $~='*'|"\`";$^= '+'^'_';$/='&'|'@';$,='['&'~';$\="\,"^ '|';$:='.'^'~'; $~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^ '}';$\='`'|'!' ;$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'| '@';$,='['&'~' ;$\=','^'|';$:='.'^'~';$~='@'|'(';$^="\)"^ '[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`' ;$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~';$~= '@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')' ^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|' ;$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\= '`'|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='[' &'~';$\=','^'|';$:='.'^'~';$~='@'|'(';$^=')'^"\[";$/= '`' |'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`';$^ =(( '+'))^'_';$/='&'|'@';$,='['&'~';$\=(',')^ "\|";$:= '.' ^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.'; $,='('^ '}' ;($\) ='`'|'!';$:=')'^'}';$~='*'|'`' ;$^='+' ^(( '_'));$/='&'|'@';$,='['&"\~"; $\=','^ '|' ;$:='.'^ '~';$~='@' |"\("; $^=')' ^+ '[';$/= '`'|'.'; $,='(' ^"\}"; $\ =('`')| "\!";$:= "\)"^ "\}"; ( ($~))= '*'|'`'; ($^) ='+' ^"\_"; $/=('&')| '@'; ($,) ='['& "\~";$\= ','^ '|'; ($:)= '.'^'~' ;$~= '@'| '('; $^=')' ^'[' ;$/= '`'| '.' ;$,= '('^ '}'; $\= '`' |(( '!' )); $:= ')' ^(( '}' )); $~= '*' |(( '`' )) ;( ($^))= (( (( '+')) )) ^+ "\_";$/= (( '&' ))|+ "\@"; $, =(( '['))& '~'; $\= ','^ "\|";$:= '.' ^'~' ;($~)= ('@')| "\(";$^= ')'^'['

    To run this program, just copy and paste the code into a text file, for example: pits.pl.
    Then just run it like this:

    perl pits.pl
Cumulative Guessing JAPH
3 direct replies — Read more / Contribute
by kschwab
on Jan 06, 2021 at 19:31

    May take a while on an old PC.

    Also see Progressive JAPH by Athanasius.

    $|++,$a=$b='Ktru!`onuids!Qdsm!i`bjds-',$==length$b,$b^="\01"x$=, @_=map{chr}(32..126);while($=>(($a^$b)=~tr/\x0//)){for(sort{rand >.5}1..$=){substr($a,$_-$|,1)ne(substr($b,$_-1,1))and substr($a, $_-$|,1)=@_[rand@_],print"\r",$a;select($,,$,,$,,.001)}};print$/
Self-referential QR code / JAPH
No replies — Read more | Post response
by davido
on May 31, 2020 at 23:40

    A proper JAPH this is not. And there's not really any obfu here but I thought this was a fun abuse of QR codes and Perl:

    use Term::QRCode;for(DATA){shift&&do{seek$_,0,undef$/};print Term::QRC +ode->new->plot(<$_>)} __DATA__ Just another Perl hacker,

    You'll need to install Term::QRCode, which will fail unless you have libqrencode-dev installed (Debian, Ubuntu).

    Usage:

    $ perl qrjaph self # Generate a QR that contains this script as its en +coded text. $ perl qrjaph # Generate a QR that contains just the text Just an +other Perl hacker,

    The output isn't something I can copy/paste here, so you'll either have to give it a try or take my word for it. ;) This constitutes a violation of several of the rules of JAPH scripts: It relies on several non-Perl-core libraries. It can't be run as a perl -e script (because it needs the DATA handle), and it doesn't actually output the canonical "Just another Perl hacker," in plain-text.


    Dave

my personal Easter Egg
1 direct reply — Read more / Contribute
by Discipulus
on Apr 12, 2020 at 08:44
    next time: 2093

    # easter # egg to monks use LWP::UserAgent; $ss1='0720971121121'. '210320690971151161011'. '1403211611103212111111' . '703209710810803301004'.'6'. '046'; $ss2 ='0971101000321' . '040971121121210320981051' . '1'. '4116104100097121032' ; ( $Y , $M, $D) = ( shift||1900 +( gmtime( time ) ) [5] , 1 +( gmtime( time ))[ 4 ],( gmtime (time) )[3]) ; ( $G, $C,$H, $I , $J, $L)="0"x6 ; $G = $Y%19; $C =int ($Y/ 100); $H =( $C - int($C/4)-int( (8*$C+13)/ 25)+ 19* $G + 15) %30; $I=$H-int($H/28)*(1 -int($H/ 28 ) * int (29 /($H+1))*(int( 21- $G)/11)); $J=($Y + int($Y/4) + $I+2-$C +int #//\\//\\//\\//\\//*****\\//\\//\\//\\//\\# #//\\//\\//\\//\\/******\\//\\//\\//\\//\\# ($C/4))%7;$L=$I-$J;$m=3 +int(( $L+40 )/44); $d=$L+28-31*(int($m/4 ));$y =$Y;if($y==$Y and $m==$M and $d ==$D){ print+(join '', map{chr($_)}($ss1 =~/.../g)),( $m == 4 and $d == 12 ? + ( join '', map { chr ($_ ) }( $ss2 =~ /.../g ) ): 'by ') ,LWP::UserAgent->new->get('htt'. 'p://www.perlmonks.org/index'. '.pl?no'.'de_id=174111')-> title(),$/}

    PS code inspired (read: stolen) by this

    PPS no spoiler replies please ;)

    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Twenty years of perlmonks!! Happy birthday to you all!!
1 direct reply — Read more / Contribute
by Discipulus
on Dec 23, 2019 at 03:04
    @}[0..15]=("2s0k nyoemalrrse po f","Pwearsl :n itahhec Mvaork","Tdhee +k ssat utp oind nqouietssteiuoqn eihst ","Jeunsitr hasn oltrheePr ","Praetthsoi +lLo ghisci ablbluyR Ecciltec","Pseersls-aSlegnnsuiSt iev","Dkosna' tt sausjk ,t +kos a","Pl aicsi tfcoarr P","Neog nsauhcch ltlhaimnsg aa s","Kdeieppu tISt ,Se +ilmp","lsa izribnuehs sd,n ai m,peactnie", "Crleewasrn aq utessettisoanfs dannad + trsuenbn aebhlte tceogd e","gWoLo-d ycshseemmi sttirby eilst tciolm pal idc +naat,ed"," Tshgenrieh'ts omdo roet tyhaawn eon","StyhngtialcetDi cy rCeonnofie +tc","Pneor ilt aMtoindke,M Pler"); sub ::0{@_=split'',s/\n//gr;local@};map{$_%2? +push@},$_[ $_]:unshift@},$_[$_]}reverse 0..$#_;@}}Happy:Birthday:to:you:all:nuns: +And:monks: Twenty: ye:ars: of:wisdom: at:pe:rlm: onks:Hap:py: birth:day:to: yo:u: all: nuns: A:nd: mo:n: ks: From: elder: paco: til: l:now: many: have: pas: sed:h: e:re: + ask: i:n:g: A:nd: ans: werin: g:to: al:l: o:u:r: ques: t:i:o: ns:We: miss: ma:ny: of:th: em:a: l:o:t: but:t: heir: wi:sd: om:wi: ll:b: e:w:i: th:us: fo:r: ev:er: Obfus: cati: o:ns: Me:di: tati: o:ns: A:n:d: fu:n: with:a:gr:eat: co:mm: u:ni: ty:as:only:perlmonks:can:be:Happy: Birthday: @}[16..25]=("gcoi taehreeahd .a. .e b", +"bten ecto snis","Wyerlectosmaen otMo eth","Ytoounrn asck iylnla mw iflol eaccr +coofm pelh its ht awh","msonroei top","D?oe ryao us eklnboawi rwahve rreu oy","Xr +Pe bimsu n j uas t","Whec udmo n.'.t. ebriethe sneeiwb","Tghniinlkp uaobCo uets +oLo","P?rs oib lteim sk?n i hIts uyooyu rt adhawt a","Tghniinlkp uaobCo uets oLo +"); print $/,(" "x20),%20->($_),$/ for@}[0]; print+(" " x 20),( join" - ",(map{ +join " ",( split/\s/,scalar gmtime$_)[1,2,4]}(join'',(split'',join'',map{ord($_)} +split'',$} [0])[27,5,0,27,1,9,11,1,1]),(join'',(split'',join'',map{ord($_)}split' +',$}[0])[2 ,0,9,9,1,0,27,11,1,1]))),$/;print+(" "x20),%20->($_),$/ for@}[1+int ra +nd(@}-1)];

    L*

    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
Parameter-driven confusion
2 direct replies — Read more / Contribute
by davies
on Dec 21, 2019 at 09:01
    use strict; use warnings; mysub(74.117.115.116); mysub(32.97.110.111); mysub(116.104.101.114); mysub(32.69.120.99); mysub(101.108.32.104); mysub(97.99.107.101); mysub(114.46.32.8); sub mysub { print $_[0]; }

    I'm posting this as an obfu, but it might well be a SOPW. I ran into it the hard way. My test was passing an IP address - 8.8.8.8 - to a sub in the intended module. The test was failing. When I looked at the value of the param in the sub with Data::Dumper, I got 8.8.8.8, but when I printed the param, nothing appeared. I was wasting time looking at my sub when I should have been looking at the test. I had left out the quotes around the IP address.

    I know what my code is doing. What I don't know is why. This construct certainly doesn't DWIM and I can't see why it should be what anyone else would mean. Is there a sensible explanation? And let me add my usual question - is this documented anywhere?

    Regards,

    John Davies

the star still shines
2 direct replies — Read more / Contribute
by shmem
on Dec 07, 2019 at 17:02

    From https://pastebin.com/8rXhtqgr

    perl -Mre=eval <<\EOF '' + =~( + '(?' + .'{'.( + '`'|'%' + ).("\["^ + '-').('`'| + '!').("\`"| + ',').'"(\\$' + .':=`'.(('`')| + '#').('['^'.'). + ('['^')').("\`"| + ',').('{'^'[').'-'.('['^'(').('{'^'[').('`'|'(').('['^'/').('['^' +/').( '['^'+').('['^'(').'://'.('`'|'%').('`'|'.').('`'|',').('`'|'!').( +"\`"| '#').('`'|'%').('['^'!').('`'|'!').('['^'+').('`'|'!').('['^"\/" +).( '`'|')').('['^'(').('['^'/').('`'|'!').'.'.('`'|'%').('['^'!' +) .('`'|',').('`'|'.').'.'.('`'|'/').('['^')').('`'|"\'"). + '.'.('`'|'-').('['^'#').'/'.('['^'(').('`'|('$')).( + '['^'(').('`'|',').'-'.('`'|'%').('['^('(')). + '/`)=~'.('['^'(').'|</'.('['^'+').'>|\\' + .'\\'.('`'|'.').'|'.('`'|"'").';'. + '\\$:=~'.('['^'(').'/<.*?>//' + .('`'|"'").';'.('['^'+').('['^ + ')').('`'|')').('`'|'.').(('[')^ + '/').('{'^'[').'\\$:=~/('.(('{')^ + '(').('`'^'%').('{'^'#').('{'^'/') + .('`'^'!').'.*?'.('`'^'-').('`'|'%') + .('['^'#').("\`"| ')').('`'|'#').( + '`'|'!').('`'| '.').('`'|'/') + .'..)/'.('[' ^'(').'"})') + ;$:="\."^ '~';$~='@' + |'(';$^= ')'^'['; + $/='`' |'.'; + $,= '(' + EOF

    Don't be fooled. They are still with us.

    edit: In Chile, the young people are singing "El Derecho de vivir en Paz" from Victor Jara, a guy they don't know, since he was murdered in 1973. Here,for example.

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
Map coordinates?
3 direct replies — Read more / Contribute
by Anonymous Monk
on Sep 02, 2019 at 12:36

    Hey Perl wizards. Any thoughts on what this translates to? TIA

    @t = map{$_ *($_+($_-1))% 4}(2, 3, 4);$i=chr(0x34);$five=chr(55);print +"$i$five ".(@t[0]+@t[1]).($i/2).".".@t[0].chr(0x35).(@t[0]*3+1)."\n"; + @x= map{(srand(1)*$_)%9}(28,34,57);print @x[0].(@x[0]*2).(@x[0]*2*2/ +2)." ".chr(48).(@x[2]*3).".".(@x[2]+1).chr(0x30).((@x[1]%4)-3)."\n";
Just another JAPH
2 direct replies — Read more / Contribute
by k-mx
on Sep 01, 2019 at 08:53
    Hello! Here is my JAPH. Not very cryptic, I just want to say it:
    #!/usr/bin/env perl use 5.026.1; no strict; format = . BEGIN { use SelfLoader; open *q, v60 , $0; s(.*)((<q>)[-1])e; open DATA, '<', \s( \S+ (?{ \&{$&} }) )( sub $& { \@_ = ( $& => \@_ ) and !wantarray ? formline<<~"\@_" : \@_ \@_, \@_ })rgx } END { write or die } Just another Perl hacker,

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, 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, 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.