例如,我注意到perlcritic
( Perl::Critic
) 似乎并不关心if
语句中不匹配的括号。但它似乎确实关心很多事情(在较低严重性设置下)。
对我来说,如果它甚至不能告诉我我有一个简单的语法问题,比如不匹配的括号,这似乎毫无用处。这是它的设计方式吗?
例如,我注意到perlcritic
( Perl::Critic
) 似乎并不关心if
语句中不匹配的括号。但它似乎确实关心很多事情(在较低严重性设置下)。
对我来说,如果它甚至不能告诉我我有一个简单的语法问题,比如不匹配的括号,这似乎毫无用处。这是它的设计方式吗?
是的,这就是 Perl::Critic 的工作方式。
我不确定它是否是这样明确设计的,但编译 Perl 代码是如此微不足道,甚至没有考虑过。它也不知道如何构建您的 Perl 代码,如果它需要设置任何库路径或诸如此类的东西,那么这会增加额外的配置复杂性。此外,编译 Perl 代码可以执行 Perl 代码,因此它成为一个安全问题。
但是,它无法在无法编译的代码上正确运行。所以最好在 linting 之前编译代码。
对于语法检查,您可以使用perl -c <your program>
. 对于更系统的检查,您可以使用Test::Compile编写测试。放入t/00compile.t
. 然后您可以使用Test::Perl::Critic来测试您的代码是否违反您的标准。把它放进去t/00critic.t
,它会在编译检查后运行。