[Vienna-pm] eval in fremden namespaces?
peter pilsl
pilsl at goldfisch.at
Wed Mar 1 05:21:01 PST 2006
also, das problem ist wie folgt. Ich haben einen textstring, der eine
formeln und variablen und operatoren enthält ala
f($a,$b)+repro($m+$n,434)-$x2-($x3+$x4)
Und ich habe einen hash, der all diese funktionen und werte enthält:
my $x={funcs=>{f=>sub{ ... },
repro=>sub{....},
...
},
vars=>{a=>4,
b=>5,
m=>11,
n=>989823,
x2=>-11,
x3=>2.334,
x4=>-343434}};
Nun möchte ich es irgendwie deichseln, dass ich den Textstring mittels
eval von perl auswerten lassen kann, auf Basis der Funktionen und
Variablen in meinem Hash. Mit einem passenden Deal von Objekten und
Namespaces müsste das ja eigentlich irgendwie gehen, aber wenn ich
darüber nachdenke, ende ich immer mit Kopfweh und einer Zigarette.
Zusatzproblem ist, dass zB die Funktion repro in meinem aktuellen
namespace durchaus auch schon anderwertig vergeben sein kann und das
ganze irgendwo tief in einem namespace/objekt-Konstrukt definiert wird.
Die Lösung, einfach mittels eval alle funktionen und variablen in meinem
hash in den den aktuellen Gültigkeitsbereich zu holen und dann mit eval
den string zu evaluieren, ist für mich (derzeit noch) keine Lösung. Da
kommen dann sicher auch Garbagecollection-sorgen auf mich und meine
mod_perl-Applikation zu.
Die einzige Lösung, die ich derzeit habe, ist, selbst einen parser zu
schreiben, was aber ziemlich doof ist, weil viel arbeit, um perl
nochmals zu erfinden, oder aber mittels gefinkelten regexs meinen term
so umzuschreiben, dass $a in $x->{vars}->{a} umgewandelt wird, was
sicher immer wieder zu Problemen führt, weil es komische Formeln gibt,
mit denen meine regex nicht gerechnet hat.
danke,
lgp
--
mag. peter pilsl
goldfisch.at
IT- & dataconsulting
tel: +43 650 3574035
tel: +43 1 8900602
fax: +43 1 8900602 15
pilsl at goldfisch.at
More information about the Vienna-pm
mailing list