从Perl批评家中排除RequireRcsKeywords的正确方法是什么?

从Perl批评家中排除RequireRcsKeywords的正确方法是什么?,perl,perl-critic,Perl,Perl Critic,我试图在单个Perl脚本中排除对Perl批评家的RequireRcsKeywords的检查。我不想更改.perlcriticrc中的默认策略,所以我在源代码的顶部添加了一行“no critic”。尽管有这样的变化,Perl评论家仍然抱怨缺少RCS关键字 下面是我的测试用例(critictest.pl): 当我执行perlcritic-1--verbose 8 critictest.pl时,我得到以下输出: [Miscellanea::RequireRcsKeywords] RCS keyword

我试图在单个Perl脚本中排除对Perl批评家的RequireRcsKeywords的检查。我不想更改.perlcriticrc中的默认策略,所以我在源代码的顶部添加了一行“no critic”。尽管有这样的变化,Perl评论家仍然抱怨缺少RCS关键字

下面是我的测试用例(critictest.pl):

当我执行
perlcritic-1--verbose 8 critictest.pl
时,我得到以下输出:

[Miscellanea::RequireRcsKeywords] RCS keywords $Id$ not found at line 1, column 1.  (Severity: 2)
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $HeadURL$, $Date$ not found at line 1, column 1.  (Severity: 2)
[Miscellanea::RequireRcsKeywords] RCS keywords $Revision$, $Source$, $Date$ not found at line 1, column 1.  (Severity: 2)
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1.  (Severity: 2)
[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1.  (Severity: 2)
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 5, column 1.  (Severity: 1)
我知道Perl评论家正在工作,因为如果我添加
##no Critic(requirectedsyscalls)
,那么输出中的错误就会消失。我还尝试添加了
“##无评论(Miscellane::RequireRcsKeywords)
,但这并没有引起任何变化。告诉Perl批评家忽略我的文件中的RequireRcsKeywords策略而不必使用外部策略文件的正确方法是什么


编辑:我使用的是Perl 5.10.1、Perl Critic 1.108和Debian 6.0.3。

注意,冲突发生在文件的第1行。如果我删除你的第一行,我不会得到
RCS
冲突。我怀疑此策略适用于整个文件,并且只有在文件的第一行出现
no critic
pragma时才能忽略此策略

还要注意,它告诉您它忽略了您的pragma:

[Miscellanea::ProhibitUselessNoCritic] Useless '## no critic' annotation at line 2, column 1.  (Severity: 2)

您可以将shebang和“无批评家”注释放在第一行。像这样:

#!/usr/bin/perl -- ## no critic RequireRcsKeywords

您可以使用命令行上的
--include
--exclude
.perlcriticrc
文件添加一次性调整

$ perlcritic --exclude RcsKeywords -1 --verbose 8 critictest.pl
[Modules::RequireVersionVar] No package-scoped "$VERSION" variable found at line 1, column 1.  (Severity: 2)
[InputOutput::RequireCheckedSyscalls] Return value of flagged function ignored - print at line 4, column 1.  (Severity: 1)

黑客可能会使用以下第一行:

#!/usr/bin/perl -F## no critic (Miscellanea::RequireRcsKeywords)

声明说-F标志本身没有任何作用,因此它应该是无害的。

感谢您指出这一点。我错过了。删除第一行会让Perl批评家忽略策略。不幸的是,如果不在命令前面加上
perl
,我将无法运行该命令,因为
#
已消失。请提交此行为的请求:这会导致shebang行失败:
无法打开perl脚本“###无批评者要求CSKeywords”:没有此类文件或目录
您可以说
#/usr/bin/perl--##没有批评者…
,不过(我想)。
#!/usr/bin/perl -F## no critic (Miscellanea::RequireRcsKeywords)