Is it possible to realize this in straight way?
Is it possible to redefine 'eval'?
Is it correct to use '::eval' instead of '&eval()'?
Any pitfalls?
#!/usr/bin/perl
require 5.8.0;
package filter;
use Filter::Simple;
FILTER { s/\bHi\b/Hello/g };
package main;
BEGIN { $INC{'filter.pm'} = $0 }
use Data::Dumper;
sub eval ($) {
open my $FH, '<', \$_[0];
local @INC = (sub {shift @INC; $FH}, @INC);
do 'filtered eval.pl :-)';
};
$code = "use filter;\nprint 'Hi from eval!\n';die 'test'";
# filtered eval
$ret = ::eval $code;
print 'ret=',Dumper($ret),'err=',Dumper($@);
# not filtered eval
$ret = eval $code;
print 'ret=',Dumper($ret),'err=',Dumper($@);