gpt4 book ai didi

perl - 覆盖我正在测试的程序使用的模块

转载 作者:行者123 更新时间:2023-11-28 20:03:01 25 4
gpt4 key购买 nike

我正在修改一个 Perl 程序,我想要一个可以运行该程序的原始版本(称为 launch_rockets.pl)并收集标准输出的测试工具,但不知何故跳过了 system 发生在 launch_rockets.pl 中的调用。以下代码成功覆盖 launch_rockets.pl 中的 system:

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';

到目前为止一切顺利。但是 launch_rockets.pl 还包含

use Proc::Background;

以后

Proc::Background->new('perl', 'launch_missiles.pl');

我可以将 launch_rockets.pl 复制到沙箱中,其中 Proc::Background 被 stub 替换,但我想知道是否有任何覆盖策略在文件原始环境中的 do FILE 调用中有效。

最佳答案

use lib '/my/test/library/path';

lib将目录添加到 @INC,因此 /my/test/library/path/Proc/Background.pm 将是加载的文件。把你想要的任何代码放在那里。

另一种选择是:

{
package Proc::Background;
... # Put stub code here
} # end of package Proc::Background
$INC{'Proc/Background.pm'} = 1; # Make Perl think Proc::Background is loaded

关于perl - 覆盖我正在测试的程序使用的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com