Perl::Critic 在残酷模式下
Perl::Critic in Brutal Mode
所以我最近开始使用 Perl::Critic
来检查我编写的代码的质量。我 运行 它处于残酷模式,并且有一个建议,我不认为这是一个问题。输出为:
Return value of flagged function ignored - print at line 197, column 13. See pages 208,278 of PBP. (Severity: 1)
这基本上是对打印函数的调用,带有一条输出到控制台的短消息。为什么我应该捕获几乎肯定总是 1 的 return 值,因为我想不出任何不是 1 的用例。
残酷模式是'too brutal'吗?或者我错过了什么?我应该补充一点,我确实阅读了 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
一个 print "something";
失败的用例是当 STDOUT 已打开文件并且文件系统已满时。但在我的项目中,我也不检查 print
的 return 值。
为
实施修复
print "$updated_service_name\n";
使用
my $printed = (print "$updated_service_name\n");
if (!$printed) {
die "Unable to write to stdout\n";
}
所以我最近开始使用 Perl::Critic
来检查我编写的代码的质量。我 运行 它处于残酷模式,并且有一个建议,我不认为这是一个问题。输出为:
Return value of flagged function ignored - print at line 197, column 13. See pages 208,278 of PBP. (Severity: 1)
这基本上是对打印函数的调用,带有一条输出到控制台的短消息。为什么我应该捕获几乎肯定总是 1 的 return 值,因为我想不出任何不是 1 的用例。
残酷模式是'too brutal'吗?或者我错过了什么?我应该补充一点,我确实阅读了 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
一个 print "something";
失败的用例是当 STDOUT 已打开文件并且文件系统已满时。但在我的项目中,我也不检查 print
的 return 值。
为
实施修复print "$updated_service_name\n";
使用
my $printed = (print "$updated_service_name\n");
if (!$printed) {
die "Unable to write to stdout\n";
}