또 다른 펄 해커

Just another Perl hacker

단지다른 Perl 해커, JAPH는 일반적으로 "Just another Perl hacker"를 인쇄하는 Perl 프로그램을 가리킨다(쉼표는 표준적이지만 때때로 생략된다). 짧은 JAPH 프로그램은 온라인 포럼에서 서명이나 티셔츠 디자인으로 자주 사용된다. 구문이나 약자도 서명에 (코드 없이) 가끔 사용된다.

JAPH 프로그램은 난독화된 C 콘테스트의 정신에 따라 극도로 난독화된 방법을 사용하여 분류적으로 이루어진다. 더 최근에는 이 현상이 잘 알려지자 (난독화 없이) 통상적인 예에서 이 구절을 사용하기도 한다.

서명을 서명으로 인쇄하는 작은 펄 프로그램을 사용하자는 생각은 랜달 L에 의해 생겨났다. 슈워츠, 뉴스그룹 comp.lang.perl에 올린 글에서.[1] 그는 아래에 제시된 많은 JAPPs를 썼다.

난독화되지 않은 JAPF 프로그램:

인쇄하다 "또 다른 펄 해커일 뿐이야"; 

불투명 코드에 JAP 포함:

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

변환된 문자열 리터럴에서 JAPH를 디코딩하는 중:

$_="크루아이스롤트레 cnP,ohet";$_.=$1,인쇄하다$2swwwwwwwwwwwwwwww. s/(..)(.)/; 

별도의 프로세스로 JAPP 출력:

을 위해 $i (0..4) {     만일 (!포크를 갈다) {         $i == 0 또는 아닌 { $SIG{INT} = 후보선수 { 인쇄하다 "J" } } 또는         $i == 1 또는 아닌 { $SIG{INT} = 후보선수 { 인쇄하다 "A } } 또는         $i == 2 또는 아닌 { $SIG{INT} = 후보선수 { 인쇄하다 "P" } } 또는         $i == 3 또는 아닌 { $SIG{INT} = 후보선수 { 인쇄하다 "H" } } ;         잠을 자다 $i;         지난;     } }  죽이다 INT => $; 

JAPH 인쇄와 전혀 무관한 일을 하는 것처럼 보이는 경우:

$_ = "wftedskaebj gdpjgidbsmnjgc"; tr/a-z/oh, 터틀넥  항아리!/; 인쇄하다; 

각 문자를 올바른 순서로 인쇄하는 Forking 프로세스:[2]

@P=갈라지다//,".URRU\c8R";@d=갈라지다//,"\nrekcah ninU / lreP rehtona tuJ";후보선수 p{ @p{"r$p","u$p"}=(P,P);파이프를 치다"r$p","u$p";++$p;($q*=2)+=$f=!포크를 갈다;지도를 그리다{$P=$P[$f^서품을 하다 ($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}열쇠들.%p}p;p;p;p;p;지도를 그리다{$p{$_}=~/^[P.]/&& 가까운.$_}%p;기다리다 까지$?;지도를 그리다{/^r/&&<$_>}%p;$_=$d[$q];잠을 자다 랜드(2)만일/\S/;인쇄하다 

Perl 키워드만 사용(구문 없음):[3]

아닌 생략하다 통나무를 하다 srand xor s qq qx xor s x x 길이 uc 서품을 하다 그리고 인쇄하다 CHR 서품을 하다 을 위해 qw q 합류하다 사용하다 후보선수 묶었다 qx xor 평가하다 xor 인쇄하다 qq q q xor 인트로 평가하다 lc q m cas 그리고 인쇄하다 CHR 서품을 하다 을 위해 qw y 복근  개방된 묶었다 육각의 생략하다 참조하다 y m xor 스칼라 srand 인쇄하다 qq q q xor 인트로 평가하다 lc qq y sqrt cas 그리고 인쇄하다 CHR 서품을 하다 을 위해 qw x 활자화하다 각각 돌아오다 국부적 x y 또는 인쇄하다 qq s s 그리고 평가하다 q s 정의를 내리지 않다 또는 10분의 xor 시간 xor 참조하다 인쇄하다 CHR 인트로 서품을 하다 lc 앞을 내다 qw y 육각의 경각심이 있는 치디르 죽이다 집행하다 돌아오다 y s GT 죄를 짓다 분류하다 갈라지다 

구두점만 사용할 경우 영숫자 없음. $#와 $*를 사용하면 치명적인 오류가 발생하기 때문에 Perl 5.30.0 이후 중단된다. 이 JAPF는 Eric Roode에 의해 작성되었으며 Unix 및 Unix와 유사한 시스템에서만 작동된다.

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

Eye Drops 모듈을 기반으로 문장 부호만 사용하는 훨씬 짧은 문장:

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

ASCII 아트(이 dromedary 모양의 코드가 작동하려면 콘솔 크기를 최소한 119×48로 설정해야 함):[4]

                                                       #                                                    후보선수 j(\$){($                      P,$V)=                      @_;하는 동안에($P 달러=~s:^                  ([()])::x){                    $V+=('('eq$1)?-32:31            }$V+=서품을 하다(  기판을 달다(                 $P 달러,0,1,""))-74} 후보선수 a{           나의($I,K달러,$  J,$L)=@_               ;$I=인트로($I*$M/$Z);K달러=인트로(          K달러*$M/$Z);$J=int($J*$M /$Z);$L=인트로($L*$M/$Z); $G=$          J-$I;$F=$L-K달러;$E=(복근($          G)>=복근($F))?$G:$F;($E<0) 그리고($           I,K달러)=($J,$L);$E  =.01       ;을 위해($i=0;$i<=복근$E;$i++ ){ $D->{K달러                   +인트로($i*$F/$E) }->{$I+int($i*$G/$E)}=1}}후보선수 p{$D={};$                  Z=$z  .01;지도를 그리다{    $H=$_;$I=엔화=j$H;K달러=$O=j$H;하는 동안에($H){$q=서품을 하다                 기판을 달다($H,0,1,"" );만일(42==$q){$J=j$H;$L=j$H}다른{$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달러,엔화,$O)}@_;나의$T;지도를 그리다{$y=$_;지도를 그리다{ $T.=$D->{$y}               ->{$_}?$\:' '}(-59..59);$T.="\n"}(-23..23);인쇄하다"\e[H$T"}$w= 평가하다{               요구하다 Win32::콘솔::ANSI};b달러=$w?'1;7;':"";($j,$u,$s,$t,a달러,$n,$o               ,$h,$c,$k,$p,$e,$r,$l,C달러)=갈라지다/}/,'Tw*JSK8'IAg*PJ[*J@wR}*JR]*QJ[*J'.                'BA*JQK8'I*JC}KUz]BAIJT]*QJ[R?-R[e]\리'.'}Tn*JQ]wRAI*JDnR8QAU}wT8KT'.                ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*'.'JBI/KI}T8@?PcdnfgVCBRP'.                 '?ABKV]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP[].'wQ}*JWE{n*EERk8;'.                   'J*JC}/U*OJd[OI@*BJ*JXN*J>W]U}CWq*OJ8KJ?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[\]UKVogK9K*QJ[\]n[]RI@EH@IddR[Q[]T]T3o[dk*]제'.  '[Z\U].                         '{T]*JPKTK]*OJ[QIO[PIQ]IO[[guKU\k*JE+J5R5]AI*EJ00'.  'BCB*'.                              'DMKJIR[Q+*EJ0]EK';후보선수 h{$\ = qw(% & @ x)[인트로    랜드                               4];지도를 그리다{활자화하다  "\e[$b;%dm",인트로(랜드 6)+101-60*   ($w                                  0);계통(  "cls")만일$w ;(A불,$S)=    ($_[1],   $                                 _[0]);($M,   @,)= 갈라지다  '}';을 위해(     $z=256                                 ;$z>0; $z   -=$S){$S*=   A불;p @,}      잠을 자다$_                                 [2];하는 동안에   ($_[3]&&($    z+=$ S)       <=256){                                 p@,}}("".   "32}7D$J"     ."}AG".       "$u}OG"                                 ."$s}WG"    ."$t",""      ."24}("        ."IJ$a"                                 ."}1G$n"    ."}CO$o"     ."}G$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);         다시 하다}###                              #060204 by                            #간극 @@@@@@@@@@@                         #@@@@@@@@@@@ 

참고 항목

참조

  1. ^ 랜달 L. 슈워츠 in Usenet 메시지 M1HFPVH2JQ.FSF@ 하프돔.JAPH의 기원을 설명하는 HOLDIT.COM. Google.com을 통해 이용 가능
  2. ^ Plover.com
  3. ^ 원래 사용자 blockhead에 의해 perlmonks.org에 게시됨
  4. ^ 원래 사용자 간극에 의해 perlmonks.org에 게시되었다.

추가 읽기

  • Simon Cozens (2005). Advanced Perl Programming. O'Reilly. pp. 261–263. ISBN 9780596004569.

외부 링크