[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