我正在修改一个Perl程序,我想要一个可以运行程序原始版本(调用它launch_rockets.pl)并收集标准输出的测试工具,但不知何故跳过system内部发生的调用launch_rockets.pl.以下代码成功覆盖system内部launch_rockets.pl:
use subs qw(system);
my $SYSTEM_SUCCESS = 0;
sub system {
print "***\n";
print "system @_\n";
print "***\n\n";
return $SYSTEM_SUCCESS;
}
local @ARGV = @test_args;
do 'launch_rockets.pl';
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但launch_rockets.pl也包含
use Proc::Background;
Run Code Online (Sandbox Code Playgroud)
然后
Proc::Background->new('perl', 'launch_missiles.pl');
Run Code Online (Sandbox Code Playgroud)
我可以复制launch_rockets.pl到一个Proc::Background被存根替换的沙箱中,但我想知道是否有任何覆盖策略do FILE在文件原始环境中的调用中有效.