Вы можете избежать изменения своего кода, если создадите простой модуль, подобный этому (здесь возникла концепция ):
package StopBegin;
BEGIN {
$DB::single=1;
}
1;
Затем запустите свой код как
perl -I./ -MStopBegin -d test.pl
Соответствующий ответ (предыдущий, не очень подходящий ответ ниже этого)
Если test.pl выглядит так:
use constant C => {
map {;
"C$_" => $_;
} 0 .. 255
};
вот чтовзаимодействие отладки выглядит следующим образом:
% perl -I./ -MStopBegin -d test.pl
Loading DB routines from perl5db.pl version 1.53
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
StopBegin::CODE(0x55db6287dac0)(StopBegin.pm:8):
8: 1;
DB<1> s
main::CODE(0x55db6287db38)(test.pl:5):
5: };
DB<1> -
1 use constant C => {
2: map {;
3: "C$_" => $_;
4 } 0 .. 255
5==> };
DB<2> b 3
DB<3> c
main::CODE(0x55db6287db38)(test.pl:3):
3: "C$_" => $_;
DB<3>
Обратите внимание на использование точки останова для остановки внутри map
.
Предыдущий, не очень подходящий ответ
Если test.pl
выглядит так:
my $foo;
BEGIN {
$foo = 1;
};
, вот как выглядит отладочное взаимодействие:
% perl -I./ -MStopBegin -d test.pl
Loading DB routines from perl5db.pl version 1.53
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
StopBegin::CODE(0x5567e3d79a80)(StopBegin.pm:8):
8: 1;
DB<1> s
main::CODE(0x5567e40f0db0)(test.pl:4):
4: $foo = 1;
DB<1> s
main::(test.pl:1): my $foo;
DB<1> s
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>
Обратите внимание на использование команды s
для продвиженияиначе он пропустит блок BEGIN
в test.pl