version 1.2, 2002/03/30 18:53:17
|
version 1.3, 2002/10/17 19:27:24
|
Line 214 sub reval {
|
Line 214 sub reval {
|
# Create anon sub ref in root of compartment. |
# Create anon sub ref in root of compartment. |
# Uses a closure (on $expr) to pass in the code to be executed. |
# 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) |
# (eval on one line to keep line numbers as expected by caller) |
my $evalcode = sprintf('package %s; sub { eval $__SAFE_LOCAL_expr; }', $root); |
my $evalcode = sprintf('package %s; sub { @_ = (); eval $__SAFE_LOCAL_expr; }', $root); |
my $evalsub; |
my $evalsub; |
|
|
if ($strict) { use strict; $evalsub = eval $evalcode; } |
if ($strict) { use strict; $evalsub = eval $evalcode; } |
Line 228 sub rdo {
|
Line 228 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); |
} |
} |
|
|