Just another Perl hacker

Just another Perl hacker

Just another Perl hacker, or JAPH, typically refers to a Perl program which prints "Just another Perl hacker," (the comma is canonical but is occasionally omitted). Short JAPH programs are often used as signatures in online forums, or as T-shirt designs. The phrase or acronym is also occasionally used (without code) for a signature.

JAPH programs are classically done using extremely obfuscated methods, in the spirit of the Obfuscated C Contest. More recently, as the phenomenon has become so well known, the phrase is sometimes used in ordinary examples (without obfuscation).Even more recently the P of JAPH can also stand for Perl 6, Parrot or Pugs.

The idea of using tiny Perl programs which print a signature "as a signature" was originated by Randal L. Schwartz, in his postings to the newsgroup comp.lang.perl. [Randal L. Schwartz in Usenet message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origin of JAPH. Available through google: http://groups.google.com/group/comp.lang.perl.misc/msg/ecc405feeefc120c] (In fact, many of the JAPHs below are his.)

Examples

JAPH program without obfuscation:

print "Just another Perl hacker, ";

Embedding JAPH in opaque code:

$_='987;s/^(d+)/$1-1/e;$1?eval:print"Just another Perl hacker,"';eval;

Decoding JAPH from a transposed string literal:

$_="krJhruaesrltre c a cnP,ohet";$_.=$1,print$2while s/(..)(.)//;

Appearing as if it does something completely unrelated to printing JAPH:

$_ = "wftedskaebjgdpjgidbsmnjgc";tr/a-z/oh, turtleneck Phrase Jar!/; print;

Forking processes to print out one letter each in the correct order [http://perl.plover.com/obfuscated/] :@P=split//,".URRUUc8R";@d=split//," rekcah xinU / lreP rehtona tsuJ";sub p{@p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P [$f^ord($p{$_})&6] ;$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^ [P.] /&&close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d [$q] ;sleep rand(2)if/S/;print

Using only Perl keywords (no literals or punctuation):

not exp log srand xor s qq qx xors x x length uc ord and print chrord for qw q join use sub tied qxxor eval xor print qq q q xor inteval lc q m cos and print chr ordfor qw y abs ne open tied hex expref y m xor scalar srand print qqq q xor int eval lc qq y sqrt cosand print chr ord for qw x printfeach return local x y or print qqs s and eval q s undef or oct xortime xor ref print chr int ord lcforeach qw y hex alarm chdir killexec return y s gt sin sort split

Taken from [http://perlmonks.org/?node_id=290607 perlmonks.org]

Using only punctuation (no alphanumeric characters): (Written by [http://search.cpan.org/~roode/ Eric Roode] )

`$=`;$_=%!;($_)=/(.)/;$=++$|;($.,$/,$,,$,$",$;,$^,$#,$~,$*,$:,@%)=($!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;$_++;$_++;($_,$,$,)=($~.$"."$;$/$% [$?] $_$$,$:$% [$?] ",$"&$~,$#,);$,++;$,++;$^|=$";`$_$$,$/$:$;$~$*$% [$?] $.$~$*${#}$% [$?] $;$$"$^$~$*.>&$=`

(Attribution is missing.) The above JAPH works only on Unix and Unix-like systems.

Ascii-art (to make this one work, be sure to set the console size to at least 120x50): # sub j($){($ P,$V)= @_;while($$P=~s:^ ( [()] )::x){ $V+=('('eq$1)?-32:31 }$V+=ord( substr( $$P,0,1,""))-74} sub a{ my($I,$K,$ J,$L)=@_ ;$I=int($I*$M/$Z);$K=int( $K*$M/$Z);$J=int($J*$M /$Z);$L=int($L*$M/$Z); $G=$ J-$I;$F=$L-$K;$E=(abs($ G)>=abs($F))?$G:$F;($E<0) and($ I,$K)=($J,$L);$E||=.01 ;for($i=0;$i<=abs$E;$i++ ){ $D->{$K +int($i*$F/$E) }->{$I+int($i*$G/$E)}=1sub p{$D={};$ Z=$z||.01;map{ $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord substr($H,0,1,"" );if(42=$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L); ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D->{$y} ->{$_}?$:' '}(-59..59);$T.=" "}(-23..23);print"e [H$T"}$w= eval{ require Win32::Console::ANSI};$b=$w?'1;7;':"";($j,$u,$s,$t,$a,$n,$o ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,'Tw*JSK8IAg*PJ [*J@wR}*JR] *QJ [*J'. 'BA*JQK8I*JC}KUz] BAIJT] *QJ [R?-R [e] RI'.'}Tn*JQ] wRAI*JDnR8QAU}wT8KT'. '] n*JEI*EJR*QJ] *JR*DJ@IQ [}*JSe*JD [n] *JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'. '?ABKV] }*JWe*JD [n] *JPe*JC?8B*JE};Vq*OJQ/IP ['.'wQ}*JWeOe{n*EERk8;'. 'J*JC}/U*OJd [OI@*BJ*JXn*J>w] U}CWq*OJc8KJ?O [e] U/T*QJP?}*JSe*JCnTe'. 'QIAKJR}*JV] wRAI*J?}T] *RJcJI [] 3;U] Uq*PM [wV] W] WCT*DM*SJ'. 'ZP [Z'. 'PZa [] UKVgogK9K*QJ [] n [RI@*EH@IddR [Q [] T] T] T3o [dk*JE'. ' [ZU'. '{T] *JPKTKK] *OJ [QIO [PIQIO [gUKUk*JE+J+J5R5AI*EJ00'. 'BCB*'. 'DMKKJIR [Q+*EJ0*EK';sub h{$ = qw(% & @ x) [int rand 4] ;map{printf "e [$b;%dm",int(rand 6)+101-60* ($w
|0);system( "cls")if$w ;($A,$S)= ($_ [1] , $ _ [0] );($M, @,)= split '}';for( $z=256 ;$z>0; $z -=$S){$S*= $A;p @,} sleep$_ [2] ;while ($_ [3] &&($ z+=$ S) <=256){ p@,("". "32}7D$j" ."}AG". "$u}OG" ."$s}WG" ."$t","" ."24}(" ."IJ$a" ."}1G$n" ."}CO$o" ."}GG$t" ."}QC" ."$h}" ."^G$e" ."})IG" ."$r", "32}?" ."H$p}FG$e}QG$r". "}ZC" ."$l", "28}(LC" ."" ."". "$h}:" ."J$a}EG". "$c" ."}M" ."C$k}ZG". "$e" ."}" ."dG$r","18" ."}(" ."D;" ."$C" )}{h(16 ,1,1,0 );h(8, .98,0,0 );h(16 ,1,1,1) ;h(8.0 ,0.98,0, 1); redo}### #written 060204 by #liverpole @@@@@@@ #@@@@@@@@@@@

ee also

*Hello world program
*Obfuscated Perl contest
*Perl golf

References

External links

* [http://www-106.ibm.com/developerworks/linux/library/l-japh.html Cultured Perl: The Elegance of JAPH]
* [http://www.cpan.org/misc/japh http://www.cpan.org/misc/japh] A collection of JAPHs at CPAN.


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Look at other dictionaries:

  • Just another Perl hacker — (abgekürzt JAPH) steht für ein in der Programmiersprache Perl geschriebenes kurzes Computerprogramm, das lediglich den Text „Just another Perl hacker“ ausgibt, seine Funktionsweise im Quelltext dabei aber möglichst wirkungsvoll verschleiert. Ein… …   Deutsch Wikipedia

  • Just Another Perl Hacker — …   Википедия

  • Perl — Desarrollador(es) Larry Wall www.perl.org Información general Paradigma multiparadigma, funcional, im …   Wikipedia Español

  • PERL — Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Perl (Programmiersprache) — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle Version …   Deutsch Wikipedia

  • Perl 6 — Apparu en Spécification : 2001 2011, mise en œuvre partielle par Rakudo Star Auteur …   Wikipédia en Français

  • Perl — This article is about the programming language. For other uses, see Perl (disambiguation). Perl Paradig …   Wikipedia

  • Programmiersprache Perl — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Obfuscated Perl Contest — Der Obfuscated Perl Contest ist ein Programmierwettbewerb. Die Teilnehmer reichen in der Programmiersprache Perl verfasste kurze Programme ein, deren Funktionsweise im Quelltext auf möglichst kreative Weise verschleiert (englisch: obfuscated)… …   Deutsch Wikipedia

  • Obfuscated Perl Contest — The Obfuscated Perl Contest was a competition for programmers of Perl which was held annually between 1996 and 2000. Entrants to the competition aimed to write devious, inhuman, disgusting, amusing, amazing, and bizarre Perl code .[1] It was run… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”