尽管在某些情况下,我可能希望在代码中允许深度递归,但在某些情况下(例如在测试时),我希望能够禁用它。
我知道在使用调试器时,我可以使用$DB::deep
指定最大递归深度,而我所追求的功能基本上是相同的,但是即使不在调试器中也可以使用。
我看过CPAN,但找不到任何东西。在PerlMonks上进行的搜索使我进入了关于changing the behaviour of the deep recursion warning的话题。我追求的是一种能够完全阻止递归的功能(例如,如果递归的深度太深,例如die
。
此功能存在吗?
如果解决方案允许我对它进行定位,则奖励点,以便我可以控制最大递归深度的范围。
答案 0 :(得分:9)
如先前的答案所述,您只能通过重新编译Perl来更改触发警告的级别。
但是您可以像这样使现有警告致命:
i = int(len(l)*"%x" % tuple(l), 16)
print(hex(i))
答案 1 :(得分:4)
对子例程“%s”进行深度递归(W递归)
这个子程序有 自称(直接或间接)的次数是其自身的100倍以上 回到。这可能表示无限递归,除非您 编写奇怪的基准程序,在这种情况下,它表明 其他的东西。可以通过重新编译perl将该阈值从100更改为 二进制文件,将C预处理程序宏PERL_SUB_DEPTH_WARN设置为 期望值。
因此,除非您修改perl
二进制文件,否则似乎无法本地化行为。