एक अन्य पर्ल हैकर

From Vigyanwiki

एक अन्य पर्ल या जेएपीएच, विशिष्ट रूप से एक पर्ल प्रोग्राम को संदर्भित करता है जो "एक अन्य पर्ल हैकर" प्रिंट करता है, (अल्पविराम कैनानिकल है किन्तु कभी-कभी हटा दिया जाता है)। शार्ट JAPH प्रोग्राम का उपयोग प्रायः ऑनलाइन इंटरनेट फोरम पर सिग्नेचर के रूप में, या टीशर्ट डिज़ाइन के रूप में किया जाता है। सिग्नेचर के लिए वाक्यांश या संक्षिप्त नाम का उपयोग (बिना कोड के) भी प्रायः किया जाता है।

जेएपीएच प्रोग्राम ऑब्फास्केट सी कॉन्टेस्ट के विचार में, अत्यंत ऑब्फास्केट विधियों का उपयोग करके चिरसम्मतः किए जाते हैं। वर्तमान में जैसे ही यह परिघटना प्रसिद्ध हो गई, इस वाक्यांश का उपयोग प्रायः सामान्य उदाहरणों में किया जाता है (ऑब्फास्केशन के बिना)।

एक सिग्नेचर को सिग्नेचर के रूप में प्रिंट करने वाले शार्ट पर्ल प्रोग्राम का उपयोग करने का विचार रैंडल एल. श्वार्ट्ज द्वारा न्यूज़ग्रुप कॉम्प.लैंग.पर्ल के लिए अपनी पोस्टिंग में उत्पन्न हुआ था।[1]उन्होंने अनेक JAPH प्रोग्राम लिखे जो नीचे दर्शाए गए हैं।

उदाहरण

ऑब्फास्केशन के बिना JAPH प्रोग्राम:

print "Just another Perl hacker,";

ओपेक (अपारदर्शी) कोड में JAPH एम्बेड करना:

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

ट्रांसपोज़्ड स्ट्रिंग लिट्रल से JAPH को डिकोड करना:

$_="krJhruaesrltre c a cnP,ohet";$_.=$1,print$2while s/(..)(.)//;

JAPH को अलग प्रक्रियाओं के रूप में प्रिंट करना:

for $i (0..4) {
    if (!fork) {
        $i == 0 or not { $SIG{INT} = sub { print "J" } } or
        $i == 1 or not { $SIG{INT} = sub { print "A" } } or
        $i == 2 or not { $SIG{INT} = sub { print "P" } } or
        $i == 3 or not { $SIG{INT} = sub { print "H" } } ;
        sleep $i;
        last;
    }
}

kill INT => $$;

ऐसा प्रतीत होता है मानो यह JAPH को प्रिंट करने से पूरी तरह से असंबंधित कुछ कर रहा है:

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

प्रत्येक अक्षर को सही क्रम में प्रिंट करने के लिए फोर्किंग प्रोसेस:[2]

@P=split//,".URRUU\c8R";@d=split//,"\nrekcah xinU / lreP rehtona tsuJ";sub p{
@p{"r$p","u$p"}=(P,P);pipe"r$p","u$p";++$p;($q*=2)+=$f=!fork;map{$P=$P[$f^ord
($p{$_})&6];$p{$_}=/ ^$P/ix?$P:close$_}keys%p}p;p;p;p;p;map{$p{$_}=~/^[P.]/&&
close$_}%p;wait until$?;map{/^r/&&<$_>}%p;$_=$d[$q];sleep rand(2)if/\S/;print

केवल पर्ल कीवर्ड (कंप्यूटर प्रोग्रामिंग) का उपयोग करना (कोई विराम चिह्न नहीं):[3]

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

केवल विराम चिह्नों का उपयोग करना, कोई अल्फ़ान्यूमेरिक वर्ण नहीं। यह पर्ल 5.30.0 के पश्चात ब्रेक हो जाता है क्योंकि $# और $* का उपयोग करने से फेटल एरर उत्पन्न होती हैं। यह JAPH एरिक रूड द्वारा लिखा गया था और यह केवल यूनिक्स और यूनिक्स जैसी प्रणालियों पर कार्य करता है:

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

EyeDrops मॉड्यूल के आधार पर, केवल विराम चिह्न का उपयोग करते हुए एक बहुत छोटा मॉड्यूल:

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

ASCII आर्ट (इस ड्रोमेडरी-शेप्ड के कोड को कार्य करने के लिए कंसोल साइज  को कम से कम 119×48 पर सेट करने की आवश्यकता है):[4]

                                                       #
                                                   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                                  @@@@@@@
                        #@@@@@@@@@@@


यह भी देखें

संदर्भ

  1. Randal L. Schwartz in Usenet message M1HFPVH2JQ.FSF@HALFDOME.HOLDIT.COM explaining the origin of JAPH. Available through Google.com
  2. Plover.com
  3. Originally posted at perlmonks.org by user blokhead
  4. Originally posted at perlmonks.org by user liverpole.


अग्रिम पठन

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


बाहरी संबंध