Perl -d和modulino问题

Lan*_*ceW 8 debugging perl modulino

我有一些脚本,我已经开始使用"modulino"的想法进行单元测试.我遇到一个问题,当使用"perl -d"调用脚本时,脚本不会运行,因为caller()返回一个true值.

我将脚本的主体包裹在main()中,并将一些子程序慢慢地从main()中拉出到它们自己的子程序中.

在脚本的顶部我有:

main(@ARGS) unless caller();
Run Code Online (Sandbox Code Playgroud)

当在.t测试中调用时,它可以按我的意愿工作,而不是运行main(),所以我可以测试子程序.当我从CLI调用脚本时,它可以很好地调用main().

当我从CLI调用它时出现问题:

perl -d myscript.pl
Run Code Online (Sandbox Code Playgroud)

在此阶段,调用者返回一个有效值(而不是undef),并且不调用main.

关于如何处理这个建议将非常感激.

bvr*_*bvr 9

-dswitch 的情况与测试类似 - 您的代码由其他东西执行,在本例中是调试器.

您可以main通过手动在调试器中调用它来自己运行,也可以检测是否caller是调试器.就像是:

main(@ARGS) if !caller() || (caller)[0] eq 'DB';
Run Code Online (Sandbox Code Playgroud)

  • 你的病情有误.如果`caller`为真,那么第二个条件永远不会被评估.尝试`除非调用者和(调用者)[0] ne'DB'. (2认同)
  • @cjm - 谢谢,修复.我把条件变成了积极因为我花了很长时间才弄明白. (2认同)