Еще один хакер Perl - Just another Perl hacker
Эта статья могут содержать чрезмерные или неуместные ссылки на самостоятельно опубликованные источники.Апрель 2020) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Еще один хакер Perl, или же JAPH, обычно относится к Perl программа, которая печатает "Просто еще один хакер Perl" (запятая канонический но иногда опускается). Короткие программы JAPH часто используются как подписи в сети форумы, или как Футболка конструкции. Иногда используется фраза или акроним (без код ) для подписи.
Программы JAPH классически выполняются с использованием чрезвычайно запутанный методы, в духе Обфусцированный конкурс C. В последнее время, когда это явление стало настолько хорошо известным, эта фраза иногда используется в обычных примерах (без обфускации).
Идея использования крошечных программ Perl, печатающих подпись как подпись был создан Рэндал Л. Шварц, в своих сообщениях в группа новостей comp.lang.perl.[1] Он написал много JAPH, которые показаны ниже.
Примеры
Программа JAPH без обфускации:
Распечатать «Просто еще один хакер Perl»,;
Встраивание JAPH в непрозрачный код:
$_='987; s / ^ ( d +) / $ 1-1 / e; $ 1? Eval: print "Просто еще один хакер Perl"';оценка;
Расшифровка JAPH из транспонированного строковый литерал:
$_="krJhruaesrltre c a cnP, ohet";$_.=$1,Распечатать2 доллара в то время s /(..)(.)//;
Распечатка JAPH как отдельных процессов:
за $ i (0..4) { если (!вилка) { $ i == 0 или же нет { $ SIG{INT} = суб { Распечатать "J" } } или же $ i == 1 или же нет { $ SIG{INT} = суб { Распечатать "А" } } или же $ i == 2 или же нет { $ SIG{INT} = суб { Распечатать "П" } } или же $ i == 3 или же нет { $ SIG{INT} = суб { Распечатать "ЧАС" } } ; спать $ i; последний; }}убийство INT => $$;
Кажется, будто он делает что-то совершенно не связанное с печатью JAPH:
$_ = "wftedskaebjgdpjgidbsmnjgc";tr/ а-я / очас, водолазка Фраза Банка!/; Распечатать;
Формирование процессов для печати каждой буквы в правильном порядке:[2]
@П=расколоть//,".URRUU c8R";@d=расколоть//," nrekcah xinU / lreP rehtona tsuJ";суб п{@п{"r $ p","u $ p"}=(п,п);трубка"r $ p","u $ p";++$ p;($ q*=2)+=$ f=!вилка;карта{$ P=$ P[$ f^ord($ p{$_})&6];$ p{$_}=/ ^ $ P / ix?$ P: закрыть $ _}ключи%п}п;п;п;п;п;карта{$ p{$_}=~/^[P. посетителей/&&Закрыть$_}%п;ждать до того как$?;карта{/ ^ г /&&<$_>}%п;$_=$ d[$ q];спать ранд(2)если/ S /;Распечатать
Использование только Perl ключевые слова (нет пунктуация ):[3]
нет exp бревно srand xor s qq qx xors Икс Икс длина uc ord и Распечатать chrord за qw q присоединиться использовать суб связанный qxxor оценка xor Распечатать qq q q xor intоценка lc q м потому что и Распечатать chr ordза qw у пресс ne открыто связанный шестнадцатеричный expссылка у м xor скаляр srand Распечатать qqq q xor int оценка lc qq у sqrt потому чтои Распечатать chr ord за qw Икс printfкаждый возвращаться местный Икс у или же Распечатать qqs s и оценка q s undef или же окт xorвремя xor ссылка Распечатать chr int ord lcдля каждого qw у шестнадцатеричный тревога чдир убийствоexec возвращаться у s gt грех Сортировать расколоть
Использование только пунктуация, нет буквенно-цифровой символы. Это не работает после Perl 5.30.0, поскольку использование $ # и $ * приводит к фатальным ошибкам. Этот JAPH был написан Эрик Руд и работает только на Unix и Unix-подобный системы:
`$=`;$_=\%!;($_)=/(.)/;$==++$|;($.,$/,$,,$\,$",$;,$^,$#,$~,$*,$:,@%)=($!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;$_++;$_++;($_,$\,$,)=($~.$"."$;$/$%[$?]$_$\$,$:$%[$?]",$"&$~,$#,);$,++;$,++;$^|=$";`$_$\$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$\$"$^$~$*.>&$=`
Более короткий, с использованием только знаков препинания, основанный на Слезы модуль:
''=~('(?{'.('-)@.)@_*([]@!@/)(@)@-@),@(@@+@)'^'][)@]`}`]()`@.@]@%[`}%[@`@!#@%[').',"})')
ASCII искусство (чтобы сделать это верблюд -образный код работает, размер консоли должен быть не менее 119 × 48):[4]
# суб j(\$){($ п,$ V)= @_;пока($$ P=~s:^ ([()])::Икс){ $ V+=('('экв$1)?-32:31 }$ V+=ord( substr( $$ P,0,1,""))-74} суб а{ мой($ I,$ Тыс.,$ J,$ L)=@_ ;$ I=int($ I*$ Млн/$ Z);$ Тыс.=int( $ Тыс.*$ Млн/ $ Z); $ J = int ($ J * $ M /$ Z);$ L=int($ L*$ Млн/$ Z); $ G=$ J-$ I;$ F=$ L-$ Тыс.;$ E=(пресс($ грамм)>=пресс($ F))?$ G: $ F;($ E<0) и($ я,$ Тыс.)=($ J,$ L);$ E||=.01 ;за($ i=0;$ i<=пресс$ E;$ i++ ){ $ D->{$ Тыс. +int($ i*$ F/ $ E)} -> {$ I + int ($ i * $ G /$ E)}=1}}суб п{$ D={};$ Z=$ z||.01;карта{ $ H=$_;$ I=$ N=j$ H;$ Тыс.=$ O=j$ H;пока($ H){$ q=ord substr($ 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+=$ Тыс.;а($ I,$ Тыс.,$ J,$ L); ($ I,$ Тыс.)=($ J,$ L)}а($ I,$ Тыс.,$ N,$ O)}@_;мой$ T;карта{$ y=$_;карта{ $ T.=$ D->{$ y} ->{$_}?$\:' '}(-59..59);$ T.=" п"}(-23..23);Распечатать" e [H $ T"}$ w= оценка{ требовать Win32 :: Консоль :: ANSI};$ млрд=$ w?'1;7;':"";($ j,$ u,$ s,$ т,$ а,$ n,$ o ,$ ч,$ c,$ k,$ p,$ e,$ r,$ l,$ C)=расколоть/}/,'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';суб час{$\ = qw (% & @ x)[int ранд 4];карта{printf " e [$ b;% dm",int(ранд 6)+101-60* ($ w ||0);система( "cls")если$ w ;($ A,$ S)= ($_[1], $ _[0]);($ Млн, @,)= расколоть '}';за( $ z=256 ;$ z>0; $ z -=$ S){$ S*= $ A;п @,} спать$_ [2];пока ($_[3]&&($ z+=$ S) <=256){ п@,}}("". "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» )}{час(16 ,1,1,0 );час(8, .98,0,0 );час(16 ,1,1,1) ;час(8.0 ,0.98,0, 1); повторить}### #written 060204 пользователем #liverpole @@@@@@@ #@@@@@@@@@@@
Смотрите также
Рекомендации
- ^ Рэндал Л. Шварц в Usenet сообщение [email protected], объясняющее происхождение JAPH. Доступно через Google.com
- ^ Plover.com
- ^ Первоначально размещено на perlmonks.org пользователем blokhead
- ^ Первоначально размещено на perlmonks.org пользователем Liverpole.
дальнейшее чтение
- Саймон Козенс (2005). Расширенное программирование на Perl. О'Рейли. стр.261 –263. ISBN 9780596004569.
внешняя ссылка
- Культурный Perl: элегантность JAPH
- Cpan.org, коллекция JAPH на CPAN.
- Как работает этот знаменитый JAPh? и Развлечения с зарезервированными ключевыми словами в Stack Overflow объясните, как работает код blokhead.