Я пересматриваю программу на 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';
Пока все хорошо.Но launch_rockets.pl
также содержит
use Proc::Background;
и позже
Proc::Background->new('perl', 'launch_missiles.pl');
Я мог бы скопировать launch_rockets.pl
в песочницу, где Proc::Background
заменен заглушкой, но мне было интереснобыла любая стратегия переопределения, которая была бы эффективна при вызове do FILE
в исходной среде файла.