Perl::野蛮模式下的评论家



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

Return value of flagged function ignored - print at line 197, column 13. See pages 208,278 of PBP. (Severity: 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 中有描述

此外,如果你不同意残忍设置的所有政策,你可以使用其他4种不那么残忍的设置中的一种。该工具具有高度可配置性。

这里有一个print可能失败的琐碎情况(打印到关闭的文件句柄(:

open my $fh, '>', 'out';
print $fh "555n";
close $fh;
print $fh "888n" or die "print failed: $!";
# we shouldn't get here
print "777n";

在这么短的代码中,很明显,你只是关闭了文件句柄,然后再也不会尝试打印到它。但是,如果你有很多(设计糟糕的(代码,可能会发生这种情况。

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

我为自己创建了一个运行perlcritic的脚本,这使得访问给定策略的POD变得很容易:对每个批评输出进行排序和汇总

print "something";失败的一个用例是当STDOUT已打开到文件并且文件系统已满时。但在我的项目中,我也不检查print的返回值。

实现的修复

print "$updated_service_namen";

使用

my $printed = (print "$updated_service_namen");
if (!$printed) {
die "Unable to write to stdoutn";
}

相关内容

  • 没有找到相关文章

最新更新