Just another Perl hacker

Just another Perl hacker

Just another Perl hacker (abgekürzt JAPH) steht für ein in der Programmiersprache Perl geschriebenes kurzes Computerprogramm, das lediglich den Text „Just another Perl hacker“ ausgibt, seine Funktionsweise im Quelltext dabei aber möglichst wirkungsvoll verschleiert. Ein solches Programm dient experimentellen Zwecken sowie der Unterhaltung der Programmierer und hat darüber hinaus keinerlei praktischen Nutzen, obgleich die Analyse der Funktionsweise eines JAPHs für Perl-Programmierer außerordentlich lehrreich sein kann.

Inhaltsverzeichnis

Methodik der Verschleierung

Zum Zweck der Verschleierung (engl. Obfuscation) wird der Programmcode zumeist – unter Ausnutzung auch der abwegigsten syntaktischen Möglichkeiten der Programmiersprache Perl – derart kryptisch formuliert, dass man ihm seine Funktion (die Ausgabe von „Just another Perl hacker“) selbst auf den zweiten Blick kaum ansieht. Nicht selten wird dem Quelltext darüber hinaus durch kreatives Layout ein originelles und für Programmcode völlig untypisches Erscheinungsbild verliehen. Beides dient der Verschleierung der eigentlichen Funktion und/oder der Funktionsweise des Programms, oder gar der Tatsache, dass es sich bei dem vorliegenden Text überhaupt um ein Computerprogramm handelt.

Historie

Die „Programmierdisziplin“ JAPH wurde vermutlich Anfang der 1990er Jahre durch Randal L. Schwartz begründet, der bei Postings in die Newsgroup „comp.lang.perl“ (Vorgänger der heutigen Newsgroup „comp.lang.perl.misc“) immer ein JAPH in seine Signature integrierte. (Signatures können auch andere kurze Programme enthalten, wie diese Sammlung zeigt.) Auch heute noch werden JAPHs entweder im Rahmen von Programmierwettbewerben (z. B. dem Obfuscated Perl Contest) entwickelt, oder just for fun – als kreative Fingerübung der Perl-Programmierer.

Beispiele

Ein Perl-Programm für die Ausgabe von „Just another Perl hacker“ sähe normalerweise so aus:

print "Just another Perl hacker";

Verschleierung (Obfuscation) kann beispielsweise erreicht werden durch Einbinden dieser – an sich verständlichen – Anweisung in sehr undurchsichtigen aber an sich funktionslosen Code:

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

Ein JAPH kann auch wie purer Datenmüll aussehen, obwohl dieser tatsächlich sowohl die auszugebenden Zeichen als auch den Code für deren Ausgabe enthält. In diesem Fall wurde der auszugebende Code durcheinandergewürfelt und der Perl-Einzeiler sortiert den Text zur Ausgabe wieder zurück:

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

Manche JAPHs sind weniger schwer verständlich, scheinen aber einem gänzlich anderen Zweck zu dienen als der Ausgabe von „Just another Perl hacker“. Beim folgenden Beispiel von Randal L. Schwartz wurde der auszugebende Text mit einem festen Textstring umcodiert. Der Einzeiler macht lediglich die Umcodierung rückgängig:

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

Das folgende JAPH-Programm von Eric Roode besteht ausschließlich aus Sonderzeichen; alphanumerische Zeichen und Leerraum fehlen gänzlich. (Hinweis: dieses JAPH ist nur unter Unix lauffähig.)

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

Nachstehendes Programm von Mark Jason Dominus gewann den 2. Preis im fünften Obfuscated Perl Contest, es erzeugt in abenteuerlich komplizierter Weise die Ausgabe „Just another Perl / Unix hacker“.[1]

@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

Das folgende Programm ist ein „bilingualer“ JAPH: der Code kann sowohl vom Perl-Interpreter, als auch vom Interpreter der esoterischen Programmiersprache Brainfuck ausgeführt werden. Die Ausgabe ist in beiden Fällen „Just another Perl Hacker“. Zur Funktionsweise: der große Block mit den Plus- und Minuszeichen ist im Wesentlichen der Brainfuck-Code (mit reduziertem Instruktionssatz), die erste Zeile ist Perl-Code und implementiert einen Brainfuck-Interpreter für eben diesen reduzierten Satz an Instruktionen.[2]

/[+-]/&&eval"\$/$_$_"||/\x2e/&&print chr$/for qw!
=================================================
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + .
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + . - - . + . -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - . + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + .
+ + + + + + + + + + + + + . + . + + + + + . - - -
- - - - - - - - - . - - - . + + + + + + + + + + +
+ + . - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - . + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + . + + + + + + + + + + + + + + +
+ + + + + + . + + + + + + + + + + + + + . - - - -
- - . - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - . + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + . + + + +
+ + + + + + + + + + + + + + + + + + + + + . + + .
+ + + + + + + + . - - - - - - . + + + + + + + + +
+ + + + . - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - + + + + + + + + - - - - - - - -
=================================================
A bilingual JAPH. Valid code in Perl & brainf***!

Siehe auch

Weblinks

Einzelnachweise

  1. Ausführliche Erklärung zum vorletzten Beispiel (englisch)
  2. Kurze Erläuterung zum letzten Beispiel (englisch)

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Just another Perl hacker — Just another Perl hacker, or JAPH, typically refers to a Perl program which prints Just another Perl hacker, (the comma is canonical but is occasionally omitted). Short JAPH programs are often used as signatures in online forums, or as T shirt… …   Wikipedia

  • Just Another Perl Hacker — …   Википедия

  • Perl — Desarrollador(es) Larry Wall www.perl.org Información general Paradigma multiparadigma, funcional, im …   Wikipedia Español

  • PERL — Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Perl (Programmiersprache) — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle Version …   Deutsch Wikipedia

  • Perl 6 — Apparu en Spécification : 2001 2011, mise en œuvre partielle par Rakudo Star Auteur …   Wikipédia en Français

  • Perl — This article is about the programming language. For other uses, see Perl (disambiguation). Perl Paradig …   Wikipedia

  • Programmiersprache Perl — Perl Paradigmen: prozedural, modular, teilweise objektorientiert Erscheinungsjahr: 1987 Entwickler: Larry Wall, Perl Porter Aktuelle  …   Deutsch Wikipedia

  • Obfuscated Perl Contest — Der Obfuscated Perl Contest ist ein Programmierwettbewerb. Die Teilnehmer reichen in der Programmiersprache Perl verfasste kurze Programme ein, deren Funktionsweise im Quelltext auf möglichst kreative Weise verschleiert (englisch: obfuscated)… …   Deutsch Wikipedia

  • Obfuscated Perl Contest — The Obfuscated Perl Contest was a competition for programmers of Perl which was held annually between 1996 and 2000. Entrants to the competition aimed to write devious, inhuman, disgusting, amusing, amazing, and bizarre Perl code .[1] It was run… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”