Я заметил, что когда я запускаю свою программу с perl -MDevel::Cover=-silent,-nogcov foo.pl
для сбора информации о покрытии для foo.pl
, я получаю огромное замедление от частей моей программы, которые работают с c не perl программами типа tar
, gzip
или dpkg-deb
. Благодаря этому вопросу я выяснил, как выборочно отключить Devel :: Cover, поэтому сейчас пишу:
my $is_covering = !!(eval 'Devel::Cover::get_coverage()');
my $pid = fork();
if ($pid == 0) {
eval 'Devel::Cover::set_coverage("none")' if $is_covering;
exec 'tar', '-cf', ...
}
При этом сбрасывается пять минут времени выполнения на тест, который , для 122 тестов экономит 10 часов вычислительного времени.
К сожалению, я не всегда могу добавить это утверждение eval в разветвленный дочерний процесс. Например, это невозможно сделать, когда я использую system()
. Я хочу избежать переписывания каждого из моих system()
обращений к руководству fork/exec
.
Есть ли способ отключить Devel :: Cover для моих разветвленных процессов или в основном для всего, что не является моим сценарием foo.pl
?
Спасибо!