Perl::Brutal 模式下的 Critic

标签 perl perl-critic

所以我最近开始使用 Perl::Critic 来检查我编写的代码的质量。我正在以残酷的模式运行它,并且它提出了一个我不认为是问题的建议。输出是:

标记函数的返回值被忽略 - 在第 197 行第 13 列打印。请参阅 PBP 的第 208,278 页。 (严重性:1)

这基本上是对打印函数的调用,带有一条输出到控制台的短消息。那么为什么我应该捕获几乎肯定总是 1 的返回值,因为我想不出任何不是 1 的用例。

残酷模式是否“太残酷”了?或者我错过了什么?我应该补充一点,我确实阅读了 PBP 的第 208 和 278 页,但我并不清楚答案。

最佳答案

我同意大多数时候 print 不会失败。但是,您可以通过创建一个 .perlcriticrc 文件并将这些行添加到其中(就像我所做的那样)来禁用此功能:

# Check all builtins except "print"
[InputOutput::RequireCheckedSyscalls]
functions = :builtins
exclude_functions = print

这在 Perl::Critic::Policy::InputOutput::RequireCheckedSyscalls 中有描述

此外,如果您不同意 Brutal 设置的所有政策,您可以只使用其他 4 个不那么残酷的设置之一。该工具是高度可配置的。

这是一个简单的例子,其中 print 可能会失败(打印到一个关闭的文件句柄):

open my $fh, '>', 'out';
print $fh "555\n";
close $fh;
print $fh "888\n" or die "print failed: $!";

# we shouldn't get here
print "777\n";

在这么短的代码中,很明显你只是关闭了文件句柄,你永远不会尝试打印到它。但是,如果您有很多(设计不当的)代码,它可能会发生。

还有其他原因 print 可能会失败,例如,如果另一个进程出现并删除了目录或禁用了对打开文件的写入权限。

我为自己创建了一个脚本来运行 perlcritic,这使得访问给定策略的 POD 变得容易:Sort and summarize perlcritic output

关于Perl::Brutal 模式下的 Critic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61439570/

相关文章:

linux - 不同的 perl verions 不共享安装的 rpms

windows - 为什么不鼓励在 Windows 上将 PPM perl 模块与 Strawberry perl 一起使用?

regex - Perl Regex 将字符串转换为十六进制警告未初始化的值或使用/x

perl - 如何在不使用 Perl 中的 $b(比较)$a 的情况下对一个键进行升序排序,另一个键进行降序排序?

perl - 如何并行运行 Test::Perl::Critic?

perl - 当 Perl 中发生不好的事情时,是 croak() 还是 die() 更好?

Perl 引用的 Python 等效项

perl - Strawberry perl,找不到 App/Cpan.pm

perl - 为什么 File::Find 不处理我损坏的符号链接(symbolic link)?