Thread eval (9 answers)
Opened by Froschpopo at 2006-03-03 01:12

murphy
 2006-03-08 16:19
#63432 #63432
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote=Guest,08.03.2006, 08:47][...]
Nun meine Frage :roll: Wie kann ich in dem Makro eine Variable im Hauptprogramm/Script neu setzen? Wo liegen die Grenzen von eval()? Wo ist der Unterschied zwischen String und Block eval?
[...][/quote]
In Deinem Beispiel ist das Problem, dass die lexikalische Variable $test im Hauptprogramm die globale Variable $test überschattet, die du in dem externen Makro setzt. Du könntest an der Stelle entweder our statt my verwenden oder dem Makro eine Referenz auf die Variable, die es setzen soll, übergeben.

Was die Frage zu den "Grenzen von eval" betrifft, so verstehe ich wohl nicht ganz, worauf Du hinauswillst. In einem eval kann genau der gleiche Code ausgeführt werden wie auch im Hauptprogramm, es sei denn man verwendet spezielle Tricks um die Ausführung sicherer zu machen (siehe zum Beispiel Safe).

Der Unterschied zwischen String-eval und Block-eval ist der, dass Block-eval kein eval ist ;-) Bei einem String-eval wird der Code im String zur Laufzeit des Programmes kompiliert und dann ausgeführt. Ein Block-eval ist hingegen nur eine Anweisung für den Compiler, die besagt, dass Fehler, die innerhalb des Blocks auftreten, nicht zum Abbruch des Programmes führen, sondern abgefangen und in speziellen Variablen zur weiteren Auswertung gespeichert werden sollen.
When C++ is your hammer, every problem looks like your thumb.

View full thread eval