JAPH

JAPHJust another Perl hacker(中文:另一个Perl黑客)的缩写,指一个可以打印出“Just another Perl hacker,”的Perl程序。(结尾的逗号有时候也可以忽略。)

JAPH程序通常会使用一种极端混淆的编写方式,在这一点上与混乱C语言有着相同的精神。最早的JAPH是由发表在comp.lang.perl新闻组,他将一段可以打印出JAPH的Perl代码放在自己的签名档里。此后,编写JAPH成为Perl社区的一种网络文化。

例子
一段完全没有混淆的JAPH代码:

print "Just another Perl hacker,";

一段嵌入JAPH的晦涩代码:

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

表面上看和打印JAPH完全没关系的代码:

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

一段不含任何标点,只使用了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

一段只含有标点,不含任何数字和字母的代码(由[https://metacpan.org/author/ROODE Eric Roode] 编写,只能在Unix和Unix-like系统上运行):

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

一个更短的纯标点代码,基于CPAN上的[https://metacpan.org/module/Acme::EyeDrops EyeDrops]模块生成:

=~('(?{'.('-)@.)@_([]@!@/)(@)@-@),@(@@+@)'
^'][)@]}]()@.@]@%[}%[@`@!#@%[').',"})')

一段形状像单峰骆驼(Perl的标志)的ASCII艺术代码,运行后也会输出JAPH和骆驼组成的动态的ASCII字符画:

#
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{$K
+int($i$F/$E) }->{$I+int($i$G/$E)}=1}}sub 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.="\n"}(-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/}/,'TwJSK8IAgPJ[J@wR}JR]QJ[J'.
'BAJQK8IJC}KUz]BAIJT]QJ[R?-R[e]\RI'.'}TnJQ]wRAI*JDnR8QAU}wT8KT'.
']nJEIEJRQJ]JRDJ@IQ[}JSeJD[n]JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'.
'?ABKV]]}JWeJD[n]JPeJC?8BJE};VqOJQ/IP['.'wQ}JWeOe{nEERk8;'.
'JJC}/UOJd[OI@BJJXnJ>w]U}CWqOJc8KJ?O[e]U/TQJP?}JSe*JCnTe'.
'QIAKJR}JV]wRAIJ?}T]RJcJI[\]3;U]UqPM[wV]W]WCTDMSJ'. 'ZP[Z'.
'PZa[\]UKVgogK9KQJ[\]n[RI@EH@IddR[Q[]T]T]T3o[dk*JE'. '[Z\U'.
'{T]JPKTKK]OJ[QIO[PIQIO[[gUKU\kJE+J+J5R5AIEJ00'. 'BCB*'.
'DMKKJIR[Q+EJ0EK';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)

参见
*国际C语言混乱代码大赛

参考资料
外部链接
*[https://web.archive.org/web/20041209175230/http://www-106.ibm.com/developerworks/linux/library/l-japh.html Cultured Perl: The Elegance of JAPH]
*[http://www.cpan.org/misc/japh JAPH合集] , 一个在CPAN上整理的JAPH合集。
*[http://perlmonks.org/?node=Obfuscated%20Code Obfuscated code], PerlMonks中分享混乱代码的节点,其中有很多JAPH。

评论 (0)

  • 还没有评论,来抢沙发吧。