如何让perl-c抛出未定义或未声明的函数错误? 来自C++背景,我虔诚地使用使用严格的< /代码>和代码>使用Perl:的警告< /代码>特性。 #!/usr/bin/perl -w use strict; use warnings; $foo = 1; #Throws "$foo" requires explicit package name error foobar( 1 );
如何让perl-c抛出未定义或未声明的函数错误? 来自C++背景,我虔诚地使用使用严格的< /代码>和代码>使用Perl:的警告< /代码>特性。 #!/usr/bin/perl -w use strict; use warnings; $foo = 1; #Throws "$foo" requires explicit package name error foobar( 1 );,perl,Perl,use strict结构非常有助于在错误键入变量名时捕获错误。是否有一个等价的构造来捕获输入错误的函数名?在上面的示例中,如果有类似于perl-c的东西发现没有可调用的foobar函数,那就太好了。当然,运行脚本会抛出一个未定义的子例程错误,但我希望更快地捕获它。尝试以下方法: perl -MO=Lint -cw /path/to/script.pl 这使用了。Perl不可能在编译时知道一旦到达子调用,就不会有子调用,因此-c不可能告诉您这一点 是一个用来扫描Perl代码并猜测可能出现的问题的
use strict
结构非常有助于在错误键入变量名时捕获错误。是否有一个等价的构造来捕获输入错误的函数名?在上面的示例中,如果有类似于perl-c
的东西发现没有可调用的foobar函数,那就太好了。当然,运行脚本会抛出一个未定义的子例程错误,但我希望更快地捕获它。尝试以下方法:
perl -MO=Lint -cw /path/to/script.pl
这使用了。Perl不可能在编译时知道一旦到达子调用,就不会有子调用,因此
-c
不可能告诉您这一点
是一个用来扫描Perl代码并猜测可能出现的问题的工具。Perl::Critic::StriterSubs
perlcritic
规则检查此问题。看到ikegami的答案提醒我,可以识别未声明的Sub,但您需要安装策略,它不是核心Perl::Critic
发行版的一部分
perlcritic-4 mycode.pl
子例程“foobar”既没有声明也没有显式导入
第10行第1列。这可能是一个主要的错误。(严重程度:4)
该模块完成您正在寻找的功能,并且具有词法范围
此模块提供在以下位置对子程序存在性的可选检查:
编译时。此检查检测键入错误的子例程名称和
程序员忘记导入的子程序。传统的Perl
直到运行时才检测到这些错误,因此很容易出错
潜伏在很少执行或未经测试的代码中
具体而言,在启用检查的情况下,对特定
(编译时常量)检查基于包的子例程名称。如果
指定的子例程从未声明过,则会出现错误
在编译时发出信号。这并不要求子例程
完全定义:一个转发声明,如“sub foo;”就足以
抑制错误。导入的子例程符合声明的条件。
选中的引用不仅包括子例程调用,还包括
纯引用,如“\&foo”
此检查由词汇范围的杂注控制。它是
因此,仅应用于显式需要检查的代码,并且
如有必要,可以在本地禁用检查。检查
可能需要关闭进行特殊安排的代码
例如,在运行时放置一个子例程