Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
I have a piece of code running as an Apache::Registry script under mod_perl that accepts user input and evaluates it. Hopefully, the input is a mathematical expression. In case it is not, I am trying to execture it in a 'Safe' compartment, a la:
use Safe; $compartment = new Safe('userMath'); $result = $compartment->reval($expressionToEval);
The problem is, I want to use the overloaded trig functions from Math::Complex to evaluate things such as sqrt(-4). How can I tell Safe that it is allowed to use Math::Complex?
If I use Math::Complex in the calling package, I can do
$compartment->permit(qw(sqrt));
and the code will then apparently try to use the sqrt() from Math::Complex. However, since it is unaware of things not in the compartment, it fails with
Can't locate object method "make" via package "Math::Complex" at /usr/lib/perl5/5.6.0/Math/Complex.pm line 165.I can't seem to find a way to make Safe aware of the entire Math::Complex package. I have tried strategies like:
and$compartment->share_from('Math::Complex', [ '&make' ]);
$compartment->reval('use Math::Complex');
to no avail. Any suggestions?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Using Safe to reval complex math
by diotalevi (Canon) on Jun 05, 2003 at 21:23 UTC | |
by Anonymous Monk on Jun 05, 2003 at 22:16 UTC | |
|
Re: Using Safe to reval complex math
by djantzen (Priest) on Jun 05, 2003 at 23:35 UTC | |
|
Re: Using Safe to reval complex math
by djantzen (Priest) on Jun 05, 2003 at 21:30 UTC | |
by Anonymous Monk on Jun 05, 2003 at 22:03 UTC |