Solo otro hacker de Perl
Simplemente otro hacker de Perl, o JAPH, generalmente se refiere a un programa de Perl que imprime "Simplemente otro hacker de Perl," (la coma es canónica pero ocasionalmente se omite). Los programas cortos de JAPH a menudo se usan como firmas en foros en línea o como diseños de camisetas. La frase o el acrónimo también se usa ocasionalmente (sin código) para una firma.
Los programas JAPH se realizan clásicamente usando métodos extremadamente ofuscados, en el espíritu del Concurso C ofuscado. Más recientemente, a medida que el fenómeno se ha vuelto muy conocido, la frase se usa a veces en ejemplos ordinarios (sin ofuscación).
La idea de usar pequeños programas Perl que imprimen una firma como una firma fue originada por Randal L. Schwartz, en sus publicaciones en el grupo de noticias comp.lang.perl. Escribió muchos de los JAPH que se muestran a continuación.
Ejemplos
Programa JAPH sin ofuscación:
impresión "Sólo otro Perl hacker,";
Incrustación de JAPH en código opaco:
$_=987;s/^(d+)/$1-1/e;$1?eval:print "Sólo otro Perl hacker,";eval;
Decodificación de JAPH a partir de una cadena literal transpuesta:
$_="KrJhruaesrltre c a cnP,ohet";$_.=1 dólar,impresión2 dólares s/(..)(.)//;
Imprimiendo JAPH como procesos separados:
para $i ()0..4) {} si ()!tenedor) {} $i == 0 o no {} SIG{}INT} = sub {} impresión "J" } } o $i == 1 o no {} SIG{}INT} = sub {} impresión "A" } } o $i == 2 o no {} SIG{}INT} = sub {} impresión "P" } } o $i == 3 o no {} SIG{}INT} = sub {} impresión "H" } } ; dormir $i; último; }}matar INT = dólares;
Aparece como si hiciera algo completamente ajeno a la impresión de JAPH:
$_ = "wftedskaebjgdpjgidbsmnjgc";tr/a-z/oh, cuello de tortuga Frase Jar!; impresión;
Procesos de bifurcación para imprimir una letra cada uno en el orden correcto:
@P=división//,".URRUUc8R";@d=división//,"Nrekcah xinU / lreP rehtona tsuJ";sub p{}@p{}"r$p","u$p"}=()P,P);tubería"r$p","u$p";++$p;($q*=2)+=$f=!tenedor;mapa{}$P=$P[$f^ord()$p{}$_})"6];$p{}$_}=^$P/ix?$P:close$_}llaves%p}p;p;p;p;p;mapa{}$p{}$_}=/^[P.]/"cerca$_}%p;Espera. hasta¿$?;mapa{}/^r/"▪}%p;$_=$d[$q];dormir rand()2)si/S/;impresión
Usando solo palabras clave de Perl (sin puntuación):
no exp log Srand xor s qq qx xors x x longitud Uc ord y impresión chrord para qw q Únase uso sub atado qxxor eval xor impresión qq q q xor inteval lc q m # y impresión chr ordpara qw Sí. abdominales Ne abierto atado Hex expref Sí. m xor scalar Srand impresión qqq q xor int eval lc qq Sí. Sqrt #y impresión chr ord para qw x printfcada uno retorno local x Sí. o impresión qqs s y eval q s undef o oct xortiempo xor ref impresión chr int ord lcen adelante qw Sí. Hex alarma chdir matarexec retorno Sí. s gt pecado especie división
Usando solo puntuación, sin caracteres alfanuméricos. Esto se interrumpe después de Perl 5.30.0, ya que el uso de $# y $* genera errores fatales. Este JAPH fue escrito por Eric Roode y solo funciona en sistemas Unix y similares a Unix:
`$=`;$_=%!¿Qué?)=/(.)/;$==++$ Tortura;($.,$/,$,,#,$",$;,$^,$#,#,$*,$:,@%)=()¡$!=(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.),$"),$=++;$.++;$.++;$_++;$_++;($_,#,$,)=()#.$"."$;$/$%[$?]$_$$,$:$%[$?]",$""#,$#,);$,++;$,++;$^←$";`$_$$,$/$:$;$~$*$%[$?]$~$*${#}$%[$?]$;$$"$^$~$*
Uno mucho más corto, usando solo puntuación, basado en el módulo EyeDrops:
' '=()'(? {} '.()"-)@.)@@@@@@@@@@@@@@@)@@@@@@@@@@@@@@@@@@ '^[][]@]@]()@@@]@%[`}%@@@@@@%[ ')." ')
Arte ASCII (para que este código con forma de dromedario funcione, el tamaño de la consola debe establecerse en al menos 119 × 48):
# sub j($){($ P,$V)= @_;mientras()$$P=s:^ ([()])::x){ $V+=()'(eq1 dólar)?-32:31 }$V+=ord() substr() $$P,0,1,")-74} sub a{} #()$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=()abdominales()$ G)>=abdominales()$F)?G: F;($E.0) y()$ I,$K)=()$J,$L);$ESilencio.01 ;para()$i=0;$i.abdominales$E;$i++ ){ $D-{}$K +int()$i*$F/$E)$E)=1}sub p{}$D={}$ Z=$zSilencio.01;mapa{} $H=$_;$I=$N=j$H;$K=$O=j$H;mientras()$H){$q=ord substr()$H,0,1," );si()42==$q){$J=j$H;$L=j$H}más{}$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)@_;#$T;mapa{}$y=$_;mapa{} $T.=$D-{}$y} -{}$_}?#:'.-59..59);$T.="n".-23..23);impresión"E[H$T]}$w= eval{} necesidad Win32:Consola::ANSI};$b=$w?1;7; ':";($j,$u,$,$t,$a,$n,$o ,$h,$c,$k,$p,$e,$r,$l,$C)=división/,'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J]. 'BA*JQK8I*JC}KUz]*QJ[R?-R[e]RI'.'Tn*JQ]wRAI*JDnR8QAUwT8KT '. []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[n] '.'WQ'*JWeOe{n*EERk8;'. 'J*JC}/U*OJd[OI@*BJ*JXn*J]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe '. 'QIAKJR}*JV]wRAI*J?}T]*RJcJI[]3;U]Uq*PM[wV]WCT*DM*SJ. ZP[Z]. 'PZa[]UKVgogK9K*QJ[]n[RI@*EH@IddR[Q]T3o[dk*JE '. '[ZU'. OJ[QIO[PIQIO[GUKUk*JE+J5R5AI*EJ00] '. BBC*. 'DMKKJIR[Q+*EJ0*EK ';sub h{}# = qw(%) @ x)[int rand 4];mapa{}printf "E[$b;%dm],int()rand 6)+101-60* ()$w Silencio0);sistema() "cls")si$w ;($A,$S)= ()$_[1] $ ¿Qué?[0]);$M, @,)= división ' ';para() $z=256 ;$z■0; $z -=$S){$S*= $A;p @,} dormir$_ [2];mientras ()$_[3]"()$ z+=$ S) .256){ p@♪". "32}7D$j" ."AG". "OG" ."GT" ."No"," ."24". ."IJ$a" ."1G$n" ."CO$o" .GG$t ."QC" ."h" ."^G$e" .GIG ."$r", "¿32?" ."H$p}FG$e}QG$r". "ZC" ."$l", "28}(LC) ." .". "... ."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 @@@@@@@@@@@@@@ #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Contenido relacionado
Semántica segura
Procedimientos avanzados de control de comunicación de datos
Lince (lenguaje de programación)