标签: perl-critic

从Perl Critic中排除RequireRcsKeywords的正确方法是什么?

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

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

#!/usr/bin/perl
## no critic (RequireRcsKeywords)
use warnings;
use strict;
print "Hello, World.\n";
Run Code Online (Sandbox Code Playgroud)

当我执行时,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) …
Run Code Online (Sandbox Code Playgroud)

perl perl-critic

7
推荐指数
1
解决办法
1055
查看次数

如何在Windows上的Komodo IDE 5.1中启用PerlCritic支持?

我正在尝试在Komodo中启用PerlCritic支持.

来自ActiveState的官方消息,Komodo IDE 5.1(Win 32)的制造商是:

"要启用PerlCritic支持,请安装'Perl-Critic'和'批评'模块."

好吧,安装Perl-Critic是件小事:

ppm install Bundle-Perl-Critic
Run Code Online (Sandbox Code Playgroud)

但是,我搜索了PPM4中的每个存储库(麻烦和常见的嫌疑人),他们似乎没有名为"批评"的模块.我已经使用CPAN和PPM安装了许多模块,但到目前为止,这个模块被证明是最难以捉摸的.我在这里错过了什么吗?

有没有人有幸在Windows上的Komodo 5.1中支持PerlCritic?期待您的回复.该功能在MacOS和Linux中完美运行,但是......嗯.

替代文字

ide perl winapi komodo perl-critic

6
推荐指数
2
解决办法
1311
查看次数

使用Modern :: Perl时Perl :: Critic'在限制之前的代码'

我知道最好使用Modern :: Perl而不是使用严格和警告.

使用默认选项,Perl :: Critic v1.121会在严格之前抱怨代码,即使在代码之前使用"使用Modern :: Perl"也是如此.

问题:如下所示更新perlcriticrc配置的最佳解决方案,还是有更好的方法?

下面的配置来源

cat~/.perlcriticrc

[TestingAndDebugging::RequireUseStrict]
equivalent_modules = Modern::Perl

[TestingAndDebugging::RequireUseWarnings]
equivalent_modules = Modern::Perl
Run Code Online (Sandbox Code Playgroud)

另外值得注意: 开发者讨论在这里

perl strict perl-critic

6
推荐指数
1
解决办法
2311
查看次数

我们如何使用Perl :: Tidy或Perl :: Critic来收集旁注?

我的部门目前正在解决一些通用代码的最佳实践,这是我们想有所加强,为开发人员提供Perl::TidyPerl::Critic配置.

现在我们遇到了附带评论的问题.附注是这样的:

my $counter = 0;  # Reset counter
Run Code Online (Sandbox Code Playgroud)

我们宁愿根本没有侧面评论,因为在大多数情况下,它们可以写在有问题的代码之上,在那里它们更容易阅读.如果可能的话,一个Perl::Tidy解决方案将是完美的,这会将一个侧面评论移到它上面的一行,第二个最好的将是一个Perl::Critic政策(我在CPAN没有找到)和第三个最好的,最后一个将是开发人员在进行代码审查时要注意将这些意见指出.

是否可以用Perl::Tidy或实施Perl::Critic

perl comments perl-critic perl-tidy

5
推荐指数
1
解决办法
735
查看次数

Perlcritic - 两个参数"开放"错误

我有一个脚本,我试图使用perlcritic来贬低不良做法.

我有一行如下:

open(my($FREESPCHK), $cmdline ) || &zdie($MSG_PASSTHRU,"Error checking free space of file system.");
Run Code Online (Sandbox Code Playgroud)

这给出了这个错误:在xxx行x列使用了两个参数"open".参见PBP第207页.(严重程度:5)

关于如何修复它的任何想法?

perl perl-critic

5
推荐指数
2
解决办法
2749
查看次数

使用带有perlcritic的IPC :: Open3

我想在子进程中压缩输出并只读取stderr.perlfaq8建议做以下事项:

# To capture a program's STDERR, but discard its STDOUT:
use IPC::Open3;
use File::Spec;
use Symbol qw(gensym);
open(NULL, ">", File::Spec->devnull);
my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
while( <PH> ) { }
waitpid($pid, 0);
Run Code Online (Sandbox Code Playgroud)

但后来perlcritic争论使用裸字文件句柄.

我唯一可以设计的是将select新打开的描述符/dev/null改为on STDOUT,如下所示:

# To capture a program's STDERR, but discard its STDOUT:
use IPC::Open3;
use File::Spec;
use Symbol qw(gensym);
open my $null, ">", File::Spec->devnull;
my $old_stdout = select( $null );
my $pid = …
Run Code Online (Sandbox Code Playgroud)

perl perl-critic ipcopen3

5
推荐指数
1
解决办法
584
查看次数

Perl Regex将String转换为Hex未经初始化值的警告或使用/ x

我在perl中使用正则表达式将字符串转换为十六进制,但是,当我这样做时,我会收到来自perl评论家或perl的警告:

#$test is defined, i just put the regex code snippet here...
#this will trigger a warning from perl critic
#warning: use of regex expression without "/x" expression..
$text =~  s/(.)/sprintf("%x",ord($1))/eg;

#this will trigger a a warning at run time 
#warning: "uninitialized value $1 in regexp compilation"
$text =~   m{s/(.)/sprintf("%x",ord($1))/eg}x;
Run Code Online (Sandbox Code Playgroud)

有没有办法编写上面的代码,没有得到Perl评论家的警告或反馈?

我认为问题是因为ord正在处理未定义的值,当你输入/ x时,检查regex表达式认为$ 1的值是无效的.

regex perl perl-critic

4
推荐指数
1
解决办法
419
查看次数

perlcritic:eval"require $ module";

在挖掘一些旧的源代码时,我看到了以下内容:

my $module = $some{module};
eval "require $module";
die "Bad module\n$@" if $@;
Run Code Online (Sandbox Code Playgroud)

当我理解代码的作用时,它会尝试"需要"一个模块并在它不成功时死掉 - perlcritic抱怨它

第31栏第13栏"eval"的表达形式.参见PBP第161页.(严重程度:5)

不幸的是我没有PBP书,所以想知道上面的正确方法是什么...

此外,在相同的来源发现:

sub test_repo_file {
    my($self, $repo, $test) = @_;
    my $abspath = repo_abs_path($repo);
    return "eval -$test $abspath";
}
Run Code Online (Sandbox Code Playgroud)

这里不明白什么解决了"eval",并且perlcritic再次抱怨"字符串评估"......

有人可以解释关于"字符串评估"的基本要点以及如何正确编写上述内容吗?

perl perl-critic

4
推荐指数
2
解决办法
1327
查看次数

Perlcritic配置 - 查找生成错误的策略的名称?

我正在尝试开始使用Perlcritic,我正在努力改进我自己的配置,省略了我不同意或不认为适合我的所有规则.

我知道我可以使用.perlcrirticrc文件执行此操作,并且我可以使用该文件中的exclude指令来排除我不同意的策略,但为此,我需要找到策略的名称导致我想要抑制的错误.

我无法在任何地方的CPAN文档中找到策略列表,并且错误消息没有给出生成的策略的名称,所以我完全不知道我应该如何生成我的策略排除清单.

如果有人能指出我将错误映射到策略的方法,或者甚至只是将我指向核心中的策略列表,我将非常感激!

perl perl-critic

3
推荐指数
1
解决办法
1403
查看次数

使用表达式从哈希键中删除引号

我有:

$rejected->{join ',', @needed}++ unless @filtered;
Run Code Online (Sandbox Code Playgroud)

perlcritic抱怨

title=带引号的哈希键 - 严重性 5::[HashKeyQuotes] 避免无用的引号

显然我可以降低严重程度,但我想知道是否还有其他方法?

我能想到的两个是:

  • 使用一个常数
  • 将整个移到join之外{}

还有其他方法吗?

perl perl-critic

3
推荐指数
1
解决办法
88
查看次数

标签 统计

perl ×10

perl-critic ×10

comments ×1

ide ×1

ipcopen3 ×1

komodo ×1

perl-tidy ×1

regex ×1

strict ×1

winapi ×1