【问题标题】:Lint-like program for Perl?Perl 的类似 Lint 的程序?
【发布时间】:2011-10-13 16:40:20
【问题描述】:

我正在寻找 Perl 的 lint,它可以捕获死代码和其他潜在问题。有什么建议吗?

我有

use strict;
use warnings;

已经有了,但我想要更多。

【问题讨论】:

  • 这是今天“perl lint”的第一个结果。
  • 考虑使用警告 FATAL => 'all'; 而不仅仅是使用警告;

标签: perl lint static-code-analysis


【解决方案1】:

Perl::Critic 是你的朋友。我使用Test::Perl::Critic 并将其构建到我的代码的作者测试中

【讨论】:

  • @Charles 是的,有一个ControlStructures::ProhibitUnreachableCode 政策,但这并不全知道。例如,我不相信它会分析所有常量表达式,但它在我的一些工作中提取了大多数死代码块。
  • 您还可以使用Devel::Cover 或其他代码分析器来查找无法访问(在Devel::Cover 的情况下未经测试)代码。
【解决方案2】:

Perl 没有直接等效于 lint。很大一部分原因是 Perl 没有提供像 C 那样多的方法来吊死自己。 Perl 的“lint”的基本版本是这样的:

perl -Mstrict [-Mdiagnostics] -cw <file>

这会导致 perl 编译(但不运行)指定的文件,并打开限制和警告。如果您想要更详细的消息,则可以使用诊断,如果简洁的消息对您来说足够了,则可以忽略它。

如果您想要更多内容,请尝试使用Perl::Critic,但请注意,这也不是真正的 lint。 lint 主要关注错误(例如,会阻止编译、触发运行时错误、不可移植、依赖未定义行为等的事情)。 Perl::Critic 更关注编码标准的执行。虽然有一些重叠,但它们是非常不同的东西。

【讨论】:

  • 是的,由于您描述的原因,Pel::Critic 不是我想要的。感谢您的建议。
  • 在 Mac(El Capitan 版本)上,它给了我一个带有 [-Mdiagnostics] 的目录错误。但是,我能够简单地运行 perl -Mstrict -cw myscript.pl 并且它的语法检查得很好。
  • @Volomike:不要在命令行中包含方括号。它们被用来表明其中的东西是可选的。
  • 小伙伴们要小心。 -c 仍然可以执行您的程序并严重破坏您:perldoc.perl.org/…
【解决方案3】:

使用B::Lint。您可以在命令行中使用它,方法是调用 O 模块并使用 Lint 作为参数,例如:

you@there:~/sandbox$ perl -MO=Lint Some.pm 
Implicit scalar context for array in logical and (&&) at Some.pm line 121
Implicit scalar context for array in conditional expression at Some.pm line 49
Implicit scalar context for array in logical and (&&) at Some.pm line 132
Some.pm syntax OK

【讨论】:

  • B::Lint 在 5.18 被弃用
  • @cdarke ...任何参考资料?
【解决方案4】:

除了 Perl::Critic,您可能还想查看更新的 Perl::Lint

【讨论】:

  • // , Eeeeeevery 都是批评家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多