我如何警告`perl -c`中的函数用法?
我们的代码库包括各种只应用于测试的调试钩子.作为说明性示例:
sub example { my ($arg) = @_; my $result = do_something_with($arg); debug_dump_values($arg); # debugging code return $result; } 当然,不应提交(甚至部署)此类调试代码.有没有办法在通过perl -c运行此代码时生成警告?有点像 Debug function debug_dump_values() called at example.pl line 4. 这可以作为运行时警告实现: sub debug_dump_values { carp "Debug function debug_dump_values() called"; ... } 但我希望通过其syntax check plugin在我的文本编辑器中显示警告,因此它需要是一个“编译时”警告. 解决方法
我认为这不是一件容易实现的事情 – 如果没有一些重要的编码风格重新调整,这是不可能的.
我能想到的方法: 将“调试”代码放入单独的模块中. 在模块中嵌入一个警告,指示它已启用 – 嵌入在’BEGIN’块中. (这不一定会告诉你哪个子被调用,也不一定在哪里) 例如. BEGIN { carp "Debugging module is imported" } 这样做的好处可能是 – 你可以有一个’debug’和’not debug’模块,并且两者都有相同的subs. ‘不调试’会放入虚拟潜艇. 然后,您可以使用 perl -MO = Lint [,OPTIONS] foo.pl 未定义,潜艇 通过参考分配您的子. 编辑:不能像我想的那样工作 – 有一个声明匿名子和在’BEGIN’块中创建引用的概念 – 这不像我想的那样好 – 它只在运行时出错,因为你得到的错误范围. 我能提供的最好的是: use strict; use warnings; my $debug = 1; ##debug code bit. #Comment out if not needed my $debug_sub = gimme_debug(); sub gimme_debug { if ( $debug ) { warn "Debugging enabledn"; return sub { print "Got values of :",@_,"n"; }; } else { warn "Debug subroutine defined with debug disabled!" }; } #... way down code ... &$debug_sub ( "Some input" ); 如果你删除声明,那么你将获得编译时警告,因为$debug_sub是未声明的.这可能与上述结合,例如将其捆绑在模块或对象中. 自动化测试 它并没有特别针对您的要求,但无论如何您可能还想考虑它.自动测试代码/模块.例如,使用 我也听说过(但没有做太多) The Halting Problem “在可计算性理论中,暂停问题是从任意计算机程序和输入的描述中确定程序是否将完成运行或继续永久运行的问题. Alan Turing在1936年证明,不存在解决所有可能的程序输入对的暂停问题的通用算法.证明的一个关键部分是计算机和程序的数学定义,它被称为图灵机;暂停问题对于图灵机来说是不可判定的.这是决策问题的第一个例子之一.“ 所以,如果你确实想出了一个很好的解决方案 – 可能会提供一个非常有用的大奖:). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |