8

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

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

在脚本的顶部,我有:

main(@ARGS) unless caller();

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

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

perl -d myscript.pl

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

关于如何处理这个问题的建议将不胜感激。

4

1 回答 1

9

switch的情况-d与测试类似——你的代码由其他东西执行,在这种情况下是调试器。

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

main(@ARGS) if !caller() || (caller)[0] eq 'DB';
于 2012-02-20T17:31:07.957 回答