我想在 Perl 程序中使用类似 Devel::Trace 的东西来捕获程序正在执行的操作,但我希望应用程序自行打开它。具体而言。我希望程序能够进行自测试。我想捕获程序在自检模式下执行的操作的日志,然后使用它们来验证程序是否正常运行。我想从程序内部执行此操作,以便我可以访问程序收集的其他信息,即不仅仅是痕迹。而且,我不想一直使用 -d 开关。
我想我可以让程序使用 -d 开关递归地调用自身,如果它发现它应该进行自测试并且它尚未处于打开的状态。我认为有一种方法可以检测到这一点。这有点笨拙,但可能已经足够了。
目前自检大多数都是递归调用main,同样的函数main调用,但传入自己的参数列表来替换ARGV。但是,它也可以通过覆盖变量与其他模块交互,例如实现模拟,所以我更愿意留在同一个解释器中,只需打开对 &DB.DB 的调用,这样我就可以捕获函数何时被调用和退出等。
最佳答案
$^P
使用 -d
时为 true。
BEGIN { exec $^X, "-d:Trace", "--", $0, @ARGV if !$^P }
你也可以使用
#!/usr/bin/perl -d:Trace
关于perl - 是否可以在 Perl 应用程序中打开 Perl 的 -d 标志并将其应用于自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75962399/