Ausführen von Perl-Code mittels eval
Normalerweise wird der auszuführende Code in eine Datei geschrieben,
deren Inhalt dann durch Perl abgearbeitet wird. Will man aber einem
Benutzer beispielsweise die Möglichkeit geben eigene Perl-Befehle
einzugeben und ausführen zu lassen, so ergibt sich das Problem,
daß diese Kommandos zum Zeitpunkt des Programmstarts noch nicht
bekannt sind.
Die Funktion eval()
erwartet als Argument Perl-Code, der
entweder in Form einer Zeichenkette oder als Code-Block übergeben wird.
Dieser Code wird dann zur Programmlaufzeit übersetzt und ausgeführt.
#!/usr/local/bin/perl -w
use strict;
my $v = 5; print "\$v = $v\n";
eval '$v++'; print "\$v = $v\n";
eval { $v++ }; print "\$v = $v\n";
|
|
Die erste Variante, bei der ein String übergeben wird, erlaubt eine
Fehlerbehandlung zur Laufzeit, ohne daß notwendigerweise das
Programm beendet wird. Im Fehlerfalle wird dazu die spezielle Variable
$@
gesetzt.
#!/usr/local/bin/perl -w
use strict;
my $v = 5; print "\$v = $v\n";
eval '$v+'; if($@) { print "Fehler: $@" } print "\$v = $v\n";
|
|
$v = 5 Fehler: syntax error at (eval 1) line 2, at EOF $v = 5
|
|