Hi,
man wird - hier auch - immer wieder darauf hingewisen, dass "eval() ist evil!".
Das möchte ich hinterfragen. Warum soll eval() so "böse" sein?
Neben den genannten Gründen:
es erschwert die Fehlersuche (wie sehr das der Fall ist, hängt natürlich auch von der Qualität des Interpreters ab).
Hier mal ein Beispiel anhand von Javascript:
<script type="text/javascript">
//absichtlich fehlerhafter Code
var bla = "alert('bla')";
bla += "alert('bla')";
eval(bla);
</script>
führt im IE dazu, daß noch nicht mal eine Fehlermeldung angezeigt wird, geschweige denn ein Alert.
Es kommt auch nicht das Symbol in der Statuszeile, das normalerweise bei Scriptfehlern vorhanden ist.
(ok, IE ist ja eh nicht der beste Browser zum Debuggen...)
Opera zeigt in der Javascript-Konsole folgendes (auch kein Alert):
Inline script thread
Error:
name: SyntaxError
message: Syntax error in call to eval (line 1)
alert('bla')alert('bla')
------------------^
In Zeile 1 befindet sich aber kein Script, schon gar nicht ein eval-Aufruf.
Bei einem einzigen eval ist ja noch rauszufinden, welches nun den Fehler verursacht hat.
Aber bei mehreren wird es schon komplizierter.
Die Zeile 1 kommt natürlich daher, daß im aktuellen Script (also dem Argument der eval-Funktion) in der ersten (und einzigen) Zeile der Fehler auftritt.
Mozilla liefert folgende Ausgabe:
Error: missing ; before statement
Source File: http://localhost/eval.html
Line: 15, Column: 12
Source Code:
alert('bla')alert('bla')
------------^
immerhin, die Zeilennummer ist die des eval-Aufrufs, die markierte Stelle und die Fehlerursache (missing ;) ist richtig - dafür fehlt aber der Hinweis, das hier der Code innerhalb eines eval-Aufrufs den Fehler verursacht hat - auch nicht unbedingt hilfreich.
(und nein, der Source File name ist natürlich kein Indiz für das eval - ich hätte die Datei auch blablubb nennen können)
cu,
Andreas
MudGuard? Siehe http://www.Mud-Guard.de/
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.