Отключение выполнения подпрограммы в 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
Другие вопросы по тегам