Отключение выполнения подпрограммы в perl в режиме DEBUG
Можно ли отключить выполнение определенной подпрограммы, когда мы выполняем сценарий в режиме отладки?
Supoose, вызывается sub tryme, выполнение которого занимает довольно много времени, я хотел бы отключить / пропустить выполнение подпрограммы.
- Один из доступных вариантов - прокомментировать звонок - редактирование скрипта не рекомендуется
- Измените переменную, которая проверена в tryme () - подпрограмма не имеет этой возможности
- Следовательно, можем ли мы использовать любой из параметров DEBUG для отключения выполнения подпрограммы
Спасибо,
4 ответа
Вы можете установить глобальную переменную или переменную командной строки для установки (например) $debug = 1
, Тогда вы могли бы указать ваши суб-вызовы так:
_long_function() unless $debug == 1;
или же
unless ($debug) {
...
}
Я думаю, что вы найдете то, что вы хотите в идентификации процедуры и заменить ее другой процедурой. Принятый ответ должен охватывать это.
$^P
переменная содержит флаги, определяющие, какой режим отладки активен в данный момент. Поэтому мы можем написать код, который демонстрирует совершенно другое поведение в отладчике:
$ cat heisenbug.pl
use List::Util qw/sum/;
if ($^P) {
print "You are in the debugger. Flags are ", unpack("b*", $^P), "\n";
} else {
print "sum = ", sum(@ARGV), "\n";
}
$ perl heisenbug.pl 1 2 3 4 5 6 7 8 9 10
sum = 55
$ perl -d heisenbug.pl 1 2 3 4 5 6 7 8 9 10
Loading DB routines from perl5db.pl version 1.37
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(-:2): if ($^P) {
DB<1> n
main::(-:3): print "You are in the debugger. Flags are ", unpack("b*", $^P), "\n";
DB<1> n
You are in the debugger. Flags are 10001100000111001010110010101100
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
DB<1> q
$
Переменная и значение флагов задокументированы в perlvar
Вы можете проверить переменную окружения следующим образом:
_long_function() if $ENV{ DEBUG };
И запустите скрипт, как следующий, если вы хотите этого _long_function
выполнить:
DEBUG=1 ./script.pl
В обычных случаях _long_function
не будет называться:
./script.pl