有一个简单的模块
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;
Run Code Online (Sandbox Code Playgroud)
该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)
Run Code Online (Sandbox Code Playgroud)
如何让perlcritic开心?
是的,整洁有助于解决第一个问题(但是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;
Run Code Online (Sandbox Code Playgroud)
但仍然得到:
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)
Run Code Online (Sandbox Code Playgroud)
我的percritic:
$ perlcritic --version
1.125
Run Code Online (Sandbox Code Playgroud)
Thi*_*Not 13
看起来method关键字from Method::Signatures::Simple抛出perlcritic.请注意PPI解析以下程序的方式不同:
$ tools/ppidump 'method foo { 1 } 1;'
PPI::Document
PPI::Statement
[ 1, 1, 1 ] PPI::Token::Word 'method'
[ 1, 8, 8 ] PPI::Token::Word 'foo'
PPI::Structure::Block { ... }
PPI::Statement
[ 1, 14, 14 ] PPI::Token::Number '1'
[ 1, 18, 18 ] PPI::Token::Number '1'
[ 1, 19, 19 ] PPI::Token::Structure ';'
$ tools/ppidump 'sub foo { 1 } 1;'
PPI::Document
PPI::Statement::Sub
[ 1, 1, 1 ] PPI::Token::Word 'sub'
[ 1, 5, 5 ] PPI::Token::Word 'foo'
PPI::Structure::Block { ... }
PPI::Statement
[ 1, 11, 11 ] PPI::Token::Number '1'
PPI::Statement
[ 1, 15, 15 ] PPI::Token::Number '1'
[ 1, 16, 16 ] PPI::Token::Structure ';'
Run Code Online (Sandbox Code Playgroud)
使用时method,整个程序被视为单个语句; 使用时sub,1;被视为单独的声明.
要使perlcritic安静,可以在方法的右括号后添加分号:
method func {
...
};
1;
Run Code Online (Sandbox Code Playgroud)
或者
method func {
...
}
;1;
Run Code Online (Sandbox Code Playgroud)
但是,我认为amon在评论中提出了一个很好的观点:
perlcritic无法处理语法扩展,例如方法签名......由于这些问题,我倾向于在语法扩展和perlcritic之间进行选择 - 并且在大多数情况下不得不更喜欢静态分析而不是语法糖.
| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |