[quote=murphy,08.03.2006, 15:19][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.[/quote]
Hi!
Vielen Dank für Deine Antwort! Das hilft mir doch schon sehr weiter!
Mit Grenzen meinte ich: Wieviel Code kann ich dem eval übergeben? 100 Zeichen? 1000 Zeichen? 10000 Zeichen? Oder ist das eigentlich wurscht?
Vielen Dank und schöne Grüße,
Chris