<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=JAPH</id>
	<title>JAPH - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=JAPH"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=JAPH&amp;action=history"/>
	<updated>2026-07-17T04:25:42Z</updated>
	<subtitle>在这个wiki上该页的修订历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=JAPH&amp;diff=2637336&amp;oldid=prev</id>
		<title>imported&gt;Aronlee90：​使用HotCat已添加Category:辨识混淆</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=JAPH&amp;diff=2637336&amp;oldid=prev"/>
		<updated>2021-09-25T06:05:42Z</updated>

		<summary type="html">&lt;p&gt;使用&lt;a href=&quot;/index.php?title=WP:HOTCAT&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:HOTCAT（页面不存在）&quot;&gt;HotCat&lt;/a&gt;已添加&lt;a href=&quot;/wiki/Category:%E8%BE%A8%E8%AF%86%E6%B7%B7%E6%B7%86&quot; title=&quot;Category:辨识混淆&quot;&gt;Category:辨识混淆&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{NoteTA&lt;br /&gt;
|G1=IT&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JAPH&amp;#039;&amp;#039;&amp;#039;是&amp;#039;&amp;#039;&amp;#039;Just another Perl hacker&amp;#039;&amp;#039;&amp;#039;（中文：&amp;#039;&amp;#039;&amp;#039;另一个Perl黑客&amp;#039;&amp;#039;&amp;#039;）的缩写，指一个可以打印出“Just another Perl hacker,”的[[Perl]][[计算机程序|程序]]。（结尾的逗号有时候也可以忽略。）&lt;br /&gt;
&lt;br /&gt;
JAPH程序通常会使用一种极端[[代码混淆|混淆]]的编写方式，在这一点上与[[国际C语言混乱代码大赛|混乱C语言]]有着相同的精神。最早的JAPH是由{{link-en|Randal L. Schwartz|Randal L. Schwartz}}发表在comp.lang.perl[[新闻组]]，他将一段可以打印出JAPH的Perl[[代码]]放在自己的[[签名|签名档]]里。&amp;lt;ref&amp;gt;Randal L. Schwartz in [[Usenet]] message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origin of JAPH. Available through  [http://groups.google.com/group/comp.lang.perl.misc/msg/ecc405feeefc120c Google.com] {{Wayback|url=http://groups.google.com/group/comp.lang.perl.misc/msg/ecc405feeefc120c |date=20121021184234 }}&amp;lt;/ref&amp;gt;此后，编写JAPH成为Perl社区的一种[[网络文化]]。&amp;lt;ref&amp;gt;{{Cite web |url=http://www.perlmonks.org/?node_id=412464 |title=The Lighter Side of Perl Culture (Part II): JAPH |accessdate=2015-11-19 |archive-date=2015-11-19 |archive-url=https://web.archive.org/web/20151119175519/http://www.perlmonks.org/?node_id=412464 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==例子==&lt;br /&gt;
&lt;br /&gt;
一段完全没有混淆的JAPH代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;quot;Just another Perl hacker,&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
一段嵌入JAPH的晦涩代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$_=&amp;#039;987;s/^(\d+)/$1-1/e;$1?eval:print&amp;quot;Just another Perl hacker,&amp;quot;&amp;#039;;eval;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
表面上看和打印JAPH完全没关系的代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
$_ = &amp;quot;wftedskaebjgdpjgidbsmnjgc&amp;quot;;&lt;br /&gt;
tr/a-z/oh, turtleneck Phrase Jar!/; print;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
一段不含任何标点，只使用了Perl[[关键字]]的代码：&amp;lt;ref&amp;gt;Originally posted at [http://www.perlmonks.org/?node_id=290607 perlmonks.org] {{Wayback|url=http://www.perlmonks.org/?node_id=290607 |date=20201124121513 }} by user blokhead&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
not exp log srand xor s qq qx xor&lt;br /&gt;
s x x length uc ord and print chr&lt;br /&gt;
ord for qw q join use sub tied qx&lt;br /&gt;
xor eval xor print qq q q xor int&lt;br /&gt;
eval lc q m cos and print chr ord&lt;br /&gt;
for qw y abs ne open tied hex exp&lt;br /&gt;
ref y m xor scalar srand print qq&lt;br /&gt;
q q xor int eval lc qq y sqrt cos&lt;br /&gt;
and print chr ord for qw x printf&lt;br /&gt;
each return local x y or print qq&lt;br /&gt;
s s and eval q s undef or oct xor&lt;br /&gt;
time xor ref print chr int ord lc&lt;br /&gt;
foreach qw y hex alarm chdir kill&lt;br /&gt;
exec return y s gt sin sort split&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
一段只含有标点，不含任何数字和字母的代码（由[https://metacpan.org/author/ROODE Eric Roode] {{Wayback|url=https://metacpan.org/author/ROODE |date=20190501222647 }}编写，只能在[[Unix]]和[[Unix-like]]系统上运行）：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$&amp;quot;,$;,$^,$#,$~,$*,$:,@%)=(&lt;br /&gt;
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$&amp;quot;),$=++;$.++;$.++;&lt;br /&gt;
$_++;$_++;($_,$\,$,)=($~.$&amp;quot;.&amp;quot;$;$/$%[$?]$_$\$,$:$%[$?]&amp;quot;,$&amp;quot;&amp;amp;$~,$#,);$,++&lt;br /&gt;
;$,++;$^|=$&amp;quot;;`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$&amp;quot;$^$~$*.&amp;gt;&amp;amp;$=` &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
一个更短的纯标点代码，基于[[CPAN]]上的[https://metacpan.org/module/Acme::EyeDrops EyeDrops]{{Wayback|url=https://metacpan.org/module/Acme::EyeDrops |date=20191017175737 }}模块生成：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;=~(&amp;#039;(?{&amp;#039;.(&amp;#039;-)@.)@_*([]@!@/)(@)@-@),@(@@+@)&amp;#039;&lt;br /&gt;
^&amp;#039;][)@]`}`]()`@.@]@%[`}%[@`@!#@%[&amp;#039;).&amp;#039;,&amp;quot;})&amp;#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
一段形状像[[单峰骆驼]]（Perl的标志）的[[ASCII艺术]]代码，运行后也会输出JAPH和骆驼组成的动态的ASCII字符画：&amp;lt;ref&amp;gt;Originally posted at [http://www.perlmonks.org/?node_id=528042 perlmonks.org] {{Wayback|url=http://www.perlmonks.org/?node_id=528042 |date=20201125232906 }} by user liverpole.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
                                                       #&lt;br /&gt;
                                                   sub j(\$){($&lt;br /&gt;
                     P,$V)=                      @_;while($$P=~s:^&lt;br /&gt;
                 ([()])::x){                    $V+=(&amp;#039;(&amp;#039;eq$1)?-32:31&lt;br /&gt;
           }$V+=ord(  substr(                 $$P,0,1,&amp;quot;&amp;quot;))-74} sub a{&lt;br /&gt;
          my($I,$K,$  J,$L)=@_               ;$I=int($I*$M/$Z);$K=int(&lt;br /&gt;
         $K*$M/$Z);$J=int($J*$M             /$Z);$L=int($L*$M/$Z); $G=$&lt;br /&gt;
         J-$I;$F=$L-$K;$E=(abs($          G)&amp;gt;=abs($F))?$G:$F;($E&amp;lt;0) and($&lt;br /&gt;
          I,$K)=($J,$L);$E||=.01       ;for($i=0;$i&amp;lt;=abs$E;$i++ ){ $D-&amp;gt;{$K&lt;br /&gt;
                  +int($i*$F/$E)      }-&amp;gt;{$I+int($i*$G/$E)}=1}}sub p{$D={};$&lt;br /&gt;
                 Z=$z||.01;map{    $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord&lt;br /&gt;
                substr($H,0,1,&amp;quot;&amp;quot; );if(42==$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q&lt;br /&gt;
              %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L);&lt;br /&gt;
              ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D-&amp;gt;{$y}&lt;br /&gt;
              -&amp;gt;{$_}?$\:&amp;#039; &amp;#039;}(-59..59);$T.=&amp;quot;\n&amp;quot;}(-23..23);print&amp;quot;\e[H$T&amp;quot;}$w= eval{&lt;br /&gt;
              require Win32::Console::ANSI};$b=$w?&amp;#039;1;7;&amp;#039;:&amp;quot;&amp;quot;;($j,$u,$s,$t,$a,$n,$o&lt;br /&gt;
              ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,&amp;#039;Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J&amp;#039;.&lt;br /&gt;
               &amp;#039;BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI&amp;#039;.&amp;#039;}Tn*JQ]wRAI*JDnR8QAU}wT8KT&amp;#039;.&lt;br /&gt;
               &amp;#039;]n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*&amp;#039;.&amp;#039;JBI/KI}T8@?PcdnfgVCBRcP&amp;#039;.&lt;br /&gt;
                &amp;#039;?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP[&amp;#039;.&amp;#039;wQ}*JWeOe{n*EERk8;&amp;#039;.&lt;br /&gt;
                  &amp;#039;J*JC}/U*OJd[OI@*BJ*JXn*J&amp;gt;w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe&amp;#039;.&lt;br /&gt;
                   &amp;#039;QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ&amp;#039;.  &amp;#039;ZP[Z&amp;#039;.&lt;br /&gt;
                      &amp;#039;PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE&amp;#039;.  &amp;#039;[Z\U&amp;#039;.&lt;br /&gt;
                        &amp;#039;{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00&amp;#039;.  &amp;#039;BCB*&amp;#039;.&lt;br /&gt;
                             &amp;#039;DMKKJIR[Q+*EJ0*EK&amp;#039;;sub h{$\ = qw(% &amp;amp; @ x)[int    rand&lt;br /&gt;
                              4];map{printf  &amp;quot;\e[$b;%dm&amp;quot;,int(rand 6)+101-60*   ($w&lt;br /&gt;
                               ||0);system(  &amp;quot;cls&amp;quot;)if$w ;($A,$S)=    ($_[1],   $&lt;br /&gt;
                                _[0]);($M,   @,)= split  &amp;#039;}&amp;#039;;for(     $z=256&lt;br /&gt;
                                ;$z&amp;gt;0; $z   -=$S){$S*=   $A;p @,}      sleep$_&lt;br /&gt;
                                [2];while   ($_[3]&amp;amp;&amp;amp;($    z+=$ S)       &amp;lt;=256){&lt;br /&gt;
                                p@,}}(&amp;quot;&amp;quot;.   &amp;quot;32}7D$j&amp;quot;     .&amp;quot;}AG&amp;quot;.       &amp;quot;$u}OG&amp;quot;&lt;br /&gt;
                                .&amp;quot;$s}WG&amp;quot;    .&amp;quot;$t&amp;quot;,&amp;quot;&amp;quot;      .&amp;quot;24}(&amp;quot;        .&amp;quot;IJ$a&amp;quot;&lt;br /&gt;
                                .&amp;quot;}1G$n&amp;quot;    .&amp;quot;}CO$o&amp;quot;     .&amp;quot;}GG$t&amp;quot;        .&amp;quot;}QC&amp;quot;&lt;br /&gt;
                                 .&amp;quot;$h}&amp;quot;      .&amp;quot;^G$e&amp;quot;    .&amp;quot;})IG&amp;quot;          .&amp;quot;$r&amp;quot;,&lt;br /&gt;
                                 &amp;quot;32}?&amp;quot;       .&amp;quot;H$p}FG$e}QG$r&amp;quot;.          &amp;quot;}ZC&amp;quot;&lt;br /&gt;
                                 .&amp;quot;$l&amp;quot;,          &amp;quot;28}(LC&amp;quot; .&amp;quot;&amp;quot;            .&amp;quot;&amp;quot;.&lt;br /&gt;
                                 &amp;quot;$h}:&amp;quot;           .&amp;quot;J$a}EG&amp;quot;.             &amp;quot;$c&amp;quot;&lt;br /&gt;
                                 .&amp;quot;}M&amp;quot;             .&amp;quot;C$k}ZG&amp;quot;.            &amp;quot;$e&amp;quot;&lt;br /&gt;
                                 .&amp;quot;}&amp;quot;             .&amp;quot;dG$r&amp;quot;,&amp;quot;18&amp;quot;          .&amp;quot;}(&amp;quot;&lt;br /&gt;
                                .&amp;quot;D;&amp;quot;            .&amp;quot;$C&amp;quot;  )}{h(16         ,1,1,0&lt;br /&gt;
                               );h(8,          .98,0,0   );h(16         ,1,1,1)&lt;br /&gt;
                               ;h(8.0         ,0.98,0,     1);         redo}###&lt;br /&gt;
                             #written                                 060204 by&lt;br /&gt;
                           #liverpole                                  @@@@@@@&lt;br /&gt;
                        #@@@@@@@@@@@&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参见==&lt;br /&gt;
*[[国际C语言混乱代码大赛]]&lt;br /&gt;
&lt;br /&gt;
==参考资料==&lt;br /&gt;
{{FOLDOC}}&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==外部链接==&lt;br /&gt;
*[https://web.archive.org/web/20041209175230/http://www-106.ibm.com/developerworks/linux/library/l-japh.html Cultured Perl: The Elegance of JAPH]&lt;br /&gt;
*[http://www.cpan.org/misc/japh JAPH合集] {{Wayback|url=http://www.cpan.org/misc/japh |date=20201217181950 }}, 一个在[[CPAN]]上整理的JAPH合集。&lt;br /&gt;
*[http://perlmonks.org/?node=Obfuscated%20Code Obfuscated code]{{Wayback|url=http://perlmonks.org/?node=Obfuscated%20Code |date=20151207023850 }}, [[PerlMonks]]中分享混乱代码的节点，其中有很多JAPH。&lt;br /&gt;
&lt;br /&gt;
{{标准测试项目}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl]]&lt;br /&gt;
[[Category:辨识混淆]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Aronlee90</name></author>
	</entry>
</feed>