[Cologne-pm] Felder eines Arrays ausgeben

A. Pagaltzis pagaltzis at gmx.de
Thu Apr 15 05:45:49 CDT 2004


* Robert Meiser <Robert.Meiser at rrz.uni-koeln.de> [2004-04-15 12:29]:
> Gibt es denn überhaupt eine Möglichkeit einen _String_ $x=".."
> als Bereichsoperator interpretiert zu bekommen? [..] Oder käme
> in solchen Fällen dann doch "Evil"-Eval ins Spiel?

Ja, genau das käme genau dann in Betracht.

> Ein Anwendungsbeispiel wäre vielleicht das Parsen einer
> Benutzereingabe als Perlcode.

Selten. Normalerweise willst du nicht den gesamten Sprachumfang
bereitstellen, sondern nur eine bestimmte Aufgabe lösen, und dann
sollte man nicht zu eval() greifen.

Wenn schon, dann sollte man nicht die Benutzereingabe direkt in
eval() hineinkippen (viel zu gefährlich, man übersieht leicht
Hintertüren durch die der Benutzer beliebigen Code zur Ausführung
bringen kann), sondern stattdessen die Benutzereingabe selber
parsen und dabei den Perl-Code stückweise selber erzeugen. Da hat
ein böser Bub viel weniger Angriffsfläche, sofern man natürlich
nicht Stringteile aus der Eingabe 1:1 in den Code kopiert.

Selbst in den seltenen Fällen, wo man tatsächlich benutzer-
bestimmten Code ausführen lassen will, wird eval() meistens nicht
direkt zum Einsatz kommen, sondern nur implizit, in Form von do()
oder require(). Das wäre dann zB für einen einfachen Plugin-Lade-
Mechanismus passend.

Interessant ist eval() durchaus als Mechanismus, um zB komplexe
Funktionen dynamisch zu erzeugen, à la

    eval "sub { $irgendwas $undnoch $wasanderes }";

Das kommt in Modulen häufig vor, zB als Optimierungsmechanismus
für AUTOLOAD-Zaubereien. Viele Module die bestimmte Aspekte der
objektorientierten Programmierung erleichtern sollen enthalten
solchen Code. Aber sowas ist natürlich keine Alltagsangelegen-
heit.

-- 
Gruss,
Aristoteles
 
"Wer nicht über sich selbst lachen kann, nimmt das Leben nicht ernst genug."



More information about the Cologne-pm mailing list