【发布时间】:2015-07-17 03:29:55
【问题描述】:
有一个简单的模块
package Rrr;
use 5.014;
use warnings;
use namespace::sweep;
use Moo;
use Method::Signatures::Simple;
BEGIN {
our $VERSION = '0.0.1';
}
has 'root' => (
is => 'rw',
default => 'root'
);
method func {
say 'This is the func method from ' . __PACKAGE__ . ' with value: ', $self->root;
}
1;
perlcritic -1 说
Code is not tidy at line 1, column 1. See page 33 of PBP. (Severity: 1)
Module does not end with "1;" at line 17, column 1. Must end with a recognizable true value. (Severity: 4)
Return value of flagged function ignored - say at line 18, column 5. See pages 208,278 of PBP. (Severity: 1)
如何让批评家开心?
编辑 - 基于@toolic 的评论
是的,整洁有助于解决第一个问题(但 Code is not tidy at line 1, column 1. 没有多大帮助的消息),因为差异是:
13c13
< is => 'rw',
---
> is => 'rw',
18c18,19
< say 'This is the func method from ' . __PACKAGE__ . ' with value: ', $self->root;
---
> say 'This is the func method from ' . __PACKAGE__ . ' with value: ',
> $self->root;
但还是得到了:
Module does not end with "1;" at line 17, column 1. Must end with a recognizable true value. (Severity: 4)
Return value of flagged function ignored - say at line 18, column 5. See pages 208,278 of PBP. (Severity: 1)
我的批评家:
$ perlcritic --version
1.125
【问题讨论】:
-
第 17 行是您的
method func { ... }声明的开始。似乎 perl 评论家认为这是您模块的结尾。 -
只有 perl 才能解析 Perl。 perlcritic 无法处理诸如方法签名之类的语法扩展。它可能将
method func { ... } 1;解析为method(func(sub{ ... }, 1));,即1是func的参数。您可以通过在右大括号之后、最后一个1;之前放置一个分号来解决此问题。由于这些问题,我倾向于在语法扩展和 perlcritic 之间进行选择——遗憾的是,在大多数情况下,我不得不更喜欢静态分析而不是语法糖。 -
不相关,但 Method::Signatures::Simple 还提供了一个
func关键字,因此将方法命名为func可能会造成混淆。我假设您会在实际程序中使用更好的方法名称。 :)
标签: perl perl-critic