arrays - 使用正则表达式将字符串拆分为数组时的 Perl 评论家错误
问题描述
sub func {
my ($n) = @_;
return unless ($n);
my @array;
push @array, $1 while $n =~ /
((?:
[^(),]+ |
( \(
(?: [^()]+ | (?2) )*
\) )
)+)
(?: ,\s* | $)
/xg;
return \@array;
}
for my $item (@array) {
if (index($item, '$n') != -1) {
print "HELLO\n";
}
}
我有上面的正则表达式将一些字符串拆分成数组。它工作正常。
问题是:
Perl 评论家给出以下错误。请告诉我如何解决这个问题。
在第 150 行捕获在条件之外使用的变量, 'push @array, $1 while $n =~ /' 附近。(严重性:3)
使用 '{' 和 '}' 在第 150 行分隔多行正则表达式, 'push @input_expression, $1 while $n =~ /' 附近。(严重性:1)
字符串*可能*需要在第 168 行进行插值, '$item, '$n'' 附近。(严重性:1)
解决方案
第一个是 IMO 误报,因为while
在这里充当条件 -push @array, $1
除非正则表达式匹配,否则不会执行,这是策略想要的(添加--verbose 11
到perlcritic
调用以查看解释)。在这种情况下,我认为压制政策是安全的,如下所示。
第二个很容易修复,只需替换$n =~ /.../xg
为$n =~ m{...}xg
.
push @array, $1 ## no critic (ProhibitCaptureWithoutTest)
while $n =~ m{ ... }xg;
这会抑制这两条消息。
附带说明一下,IMO 严重运行perlcritic
有点brutal
极端,它会抱怨该片段中的许多其他内容。就个人而言,当我使用它时,我会perlcritic
在harsh
( -3
) 处运行一些自定义级别的策略。
编辑:至于您perlcritic
稍后添加到帖子中的第三条消息,看起来您的其他帖子中已经回答了。
推荐阅读
- c# - GameObject' does not contain a definition for 'AddForce' || Unity3D
- html - zone-evergreen.js:2952 POST http://127.0.0.1:8000/api/users/ 404(未找到)
- java - 无法构建面向 JDK 11 的 Java 项目,目标版本 11 无效
- css - 我有一个附加动画的元素,所以我希望动画在我悬停在元素上后生效。我怎样才能做到这一点?
- mips - 为什么我的字符串长度子程序会给出一个无限循环?
- node.js - 有没有办法覆盖 NodeJS 中的传出连接?
- hadoop - Hue Filebrowser Search 仅在第一层搜索
- wordpress - 如何使用(ba)sh cURL 发布到具有基本身份验证的 Wordpress?
- node.js - firebase 函数在完成代码处理之前返回
- android - Error when inflating Bottom Navigation View even though the bottom_navigation.xml is right