Eine Argumentliste strigifizieren
Name
argList
Aufgabe
Eine Argumentliste stringifizieren.
Wir haben ein bisschen mit verschieden bizarren Lösungen für das Problem herumgespielt, wie man eine Funktion schreiben kann, die ihre Argumentliste stringifiziert, also argList(qw(foo bar baz quux)) := "('foo', 'bar', 'baz', 'quux')". Hier ein Beitrag mit einem ge'tie'ten Hash, der auf zwei verschiedene Weisen ins Spiel kommt, einmal als Identitätsfunktion, da die ganze Arbeit in einer Stringinterpolation geschieht, einmal als Iterator über die auf STDIN übergebenen Argumente.
Ich habe mich bemüht, das Programm so zu schreiben, dass auch nach einer Deobfuszierung nicht sofort offensichtlich ist, was passiert. Für den Perl-Einsteiger dürfte es schon was zum Knobeln sein. Am besten gefällt mir persönlich die einzelne geschwuffene Klammer rechts.
Skript
#!/usr/bin/perl -apl
package argList
;$ argList
=q(', ');sub TIEHASH{bless{ argList
=>[@_[1..$#_]]}=> argList
}sub SCALAR{shift@{$_[0]->{ argList
}}}sub FETCH{"('$_[1]')"}% argList
=( argList
=> argList
);tie% argList
=> argList
=>@F;$_="$ argList{
join$ argList
=>map local$ argList
=%$_=>(\% argList
)x@F}";
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---### Main.??? - 14 Jul 2003 - Betreff