如何调试在另一个 perlscript 中使用的 perl 脚本。我们可以分别调试。是否可以一步调试?
前任:
!/user/bin/perl
my $param= 8;
my @res=\`perl extract.pl $config`;
print "The results is .... @res\n";
同样,我们可以调试在 shell 脚本中使用的 perl 脚本吗?
谢谢。
动态解决方案:
my $dswitch = $INC{"perl5db.pl"} ? "-d" : "";
my @res=`perl $dswitch extract.pl $config`;
$INC{"perl5db.pl"}
使用调试器时为真,不使用时为假。
您可以将-d
switch 添加到您正在调用的脚本的 shebang 行:
#!/usr/bin/perl -d
要做的“正确”事情是更改您的设计,这样您就不会通过系统命令调用其他脚本。然后你将有一个单一的调试环境。
最好的设计是将 extract.pl 制作成一个模块。
您还可以使用该do
命令从其他文件导入代码:do 'extract.pl'
. 那么唯一需要改变的可能就是你传入的方式$config
。
这两种方法中的任何一种都非常易于实施,并且对于持续开发还有其他好处。也许您有充分的理由不这样做,但如果您还没有这样做,我会先考虑这一点。
只需调试extract.pl
传入的值$config
。如果您不知道它是什么,那么古老的 printf 将为您做到这一点。
say "\$config='$config'";
然后做:
perl -d extract.pl 'Stuff that printed in config'.
由于两者是隔离的进程,因此唯一的通信是命令行上传递的内容和被调用脚本打印的内容。所以被调用的脚本应该能够在没有调用脚本的情况下进行测试。(除非你设置了某种 IPC 或共享内存或类似的东西。)