version 1.6, 2003/08/30 02:26:37
|
version 1.7, 2003/08/30 03:25:34
|
Line 208 sub varglob {
|
Line 208 sub varglob {
|
|
|
|
|
sub reval { |
sub reval { |
my ($obj, $expr, $strict) = @_; |
$Safe::evalsub; |
my $root = $obj->{Root}; |
{ |
|
my ($obj, $expr, $strict) = @_; |
# Create anon sub ref in root of compartment. |
my $root = $obj->{Root}; |
# Uses a closure (on $expr) to pass in the code to be executed. |
|
# (eval on one line to keep line numbers as expected by caller) |
# Create anon sub ref in root of compartment. |
my $evalcode = sprintf('package %s; sub { @_ = (); eval $expr; }', $root); |
# Uses a closure (on $expr) to pass in the code to be executed. |
my $evalsub; |
# (eval on one line to keep line numbers as expected by caller) |
|
my $evalcode = sprintf('package %s; sub { @_ = (\'\'); eval $expr; }', $obj->{Root}); |
if ($strict) { use strict; $evalsub = eval $evalcode; } |
|
else { no strict; $evalsub = eval $evalcode; } |
if ($strict) { use strict; $Safe::evalsub = eval $evalcode; } |
|
else { no strict; $Safe::evalsub = eval $evalcode; } |
return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); |
} |
|
return Opcode::_safe_call_sv($_[0]->{Root}, $_[0]->{Mask}, $Safe::evalsub); |
} |
} |
|
|
sub rdo { |
sub rdo { |
Line 228 sub rdo {
|
Line 229 sub rdo {
|
my $root = $obj->{Root}; |
my $root = $obj->{Root}; |
|
|
my $evalsub = eval |
my $evalsub = eval |
sprintf('package %s; sub { @_ = (); do $file }', $root); |
sprintf('package %s; sub { @_ = (\'\'); do $file }', $root); |
return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); |
return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub); |
} |
} |
|
|