**JAPH**是**Just another Perl hacker**（中文：**另一个Perl黑客**）的缩写，指一个可以打印出"Just another Perl hacker,"的Perl程序。（结尾的逗号有时候也可以忽略。）

JAPH程序通常会使用一种极端混淆的编写方式，在这一点上与混乱C语言有着相同的精神。最早的JAPH是由Randal L. Schwartz（英语：）发表在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

```

一段只含有标点，不含任何数字和字母的代码（由Eric Roode （页面存档备份，存于）编写，只能在Unix和Unix-like系统上运行）：

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

```

一个更短的纯标点代码，基于CPAN上的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<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)}=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/}/,'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'. '[Z\U'.
 '{T]\*JPKTKK]\*OJ[QIO[PIQIO[[gUKU\k\*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 @@@@@@@
 #@@@@@@@@@@@

```

参见
--

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

参考资料
----

本條目部分或全部内容出自以GFDL授權發佈的《自由線上電腦詞典》（FOLDOC）。

1. ↑  Randal L. Schwartz in Usenet message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origin of JAPH. Available through Google.com （页面存档备份，存于）
2. ↑ .  [2015-11-19]. （原始内容存档于2015-11-19）.
3. ↑  Originally posted at perlmonks.org （页面存档备份，存于） by user blokhead
4. ↑  Originally posted at perlmonks.org （页面存档备份，存于） by user liverpole.

外部链接
----

* Cultured Perl: The Elegance of JAPH
* JAPH合集 （页面存档备份，存于）, 一个在CPAN上整理的JAPH合集。
* Obfuscated code（页面存档备份，存于）, PerlMonks中分享混乱代码的节点，其中有很多JAPH。

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
标准测试项目 |
| --- |
|  |
| 
* 全字母句
* 参考实现
* 健全性测试
* 标准测试图像

 |
|  |
| 人工智能 | 
* 中文房间
* 图灵测试

 |
|  |
| 电视（檢驗圖） | 
* 彩条信号
* 印第安人頭檢驗圖
* 测试卡F（英语：）
* 飞利浦PM5544

 |
|  |
| 计算机语言 | 
* "你好，世界"程序
* 自產生程式
* 特拉百·帕尔多-克努斯算法（英语：）
* 编译器递归测试
* JAPH

 |
|  |
| 数据压缩 | 
* 卡尔加里语料库（英语：）
* 坎特伯雷语料库（英语：）

 |
|  |
| 三维计算机图形 | 
* 康奈尔盒子（英语：）
* 斯坦福兔子
* 斯坦福龙（英语：）
* 犹他茶壶

 |
|  |
| 机器学习 | 
* ImageNet
* MNIST数据库（英语：）
* 列表（英语：）

 |
|  |
| 字体排印学 | 
* Hamburgevons（英语：）
* Lorem ipsum
* The quick brown fox jumps over the lazy dog
* 我能吞下玻璃而不伤身体

 |
|  |
| 其他 | 
* EICAR测试文件
* GTUBE
* 哈佛语句（英语：）
* 萊娜圖
* "Tom's Diner"
* SMPTE通用片头（英语：）
* 圆圈星座防伪技术
* 振动试验（英语：）
* Bad\_Apple!!#影响

 |

 |