Ответ 1
Похоже, что ключевое слово method
из 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 ';'
При использовании method
вся программа рассматривается как один оператор; при использовании sub
, 1;
рассматривается как отдельный оператор.
Чтобы сделать perlcritic тихим, вы можете добавить точку с запятой после закрывающей скобки вашего метода:
method func {
...
};
1;
или, альтернативно,
method func {
...
}
;1;
Однако, я думаю, amon сделал хороший комментарий в комментариях:
perlcritic не может обрабатывать расширения синтаксиса, такие как сигнатуры методов... Из-за таких проблем я предпочитаю выбирать между расширениями синтаксиса и perlcritic - и, к сожалению, в большинстве случаев предпочитаю статический анализ синтаксического сахара.