有一个简单的模块
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;
谚语-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的评论
是的,整洁有助于第一个问题(但代码不整齐在第1行,第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,278 of PBP. (Severity: 1)
我的诡计:
$perlcritic --version 1.125
解决方法
它看起来像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 ] 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 ';'
当使用方法时,整个程序被视为单个语句;当使用sub,1;被视为单独的声明.
为了使perlcritic安静,您可以在方法的关闭括号后添加分号:
method func { ... }; 1;
或者替代地
method func { ... } ;1;
perlcritic can’t handle Syntax extensions such as method signatures…Due to such issues,I tend to choose between Syntax extensions and perlcritic – and sadly have to prefer static analysis over syntactic sugar in most cases.