Perl::Critic在残酷模式下的表现。

问题描述 投票:0回答:2

所以我最近开始使用 Perl::Critic 来检查我写的代码的质量。我在brutal模式下运行它,有一个建议,我不明白它是一个问题。输出是

Return value of flagged function ignored - print at line 197, column 13. See pages 208,278 of PBP. (Severity: 1)

这基本上是对print函数的调用,并向控制台输出了一条短信息。那为什么我还要捕获返回值,因为我想不出任何情况下返回值不会是1。

是野蛮模式太野蛮了吗?还是我错过了什么?我应该补充的是,我确实阅读了PBP的208页和278页,我不清楚答案。

perl perl-critic
2个回答
6
投票

我同意大多数时候 print 不会失败。 但是,你可以通过创建一个名为 .perlcriticrc 文件,并在其中添加这些行(像我这样做)。

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

这在 Perl::Critic::Policy::InputOutput::RequireCheckedSyscalls

另外,如果你不同意残暴设置的所有政策,你可以直接使用其他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。排序和总结perlcritic输出


0
投票

其中一个用例是 print "something"; 失败的情况是当STDOUT已经打开一个文件,并且文件系统已满。但在我的项目中,我也没有检查返回值的 print.

© www.soinside.com 2019 - 2024. All rights reserved.