Hi,
I am fairly new to Perl and have been trying to use the Safe module to execute a perl script in a restricted compartment. There does not seem to be many (if any) examples of passing and retrieving parameters from the calling perl into the compartment. Anyhow I am having problems accessing variables passed into the compartment using the share method. My sample code is shown below and is a CGI script running through apache.
#!/usr/bin/perl -w use Safe; print "Content-type: text/html\n\n"; my %params = ( key1 => 'value1', key2 => 'value2', key3 => 'value3', ); # Run as a normal eval my $script = 'return $params{\'key1\'}'; my $ret = eval($script); warn $@ if $@; print "ret=$ret<br>"; # Now run the script in a safe compartment my $compartment = new Safe(); $compartment->share('%params'); $ret = $compartment->reval($script); print "ret=$ret<br>";
The output in the browser window is shown below:
ret=value1 ret=
Showing that the compartment does not return the same result as the normal eval. Does anyone have any idea why this does not work.
Any help is appreciated
In reply to Problems with Safe compartment reval parameters by winneymj
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |