for my $item (@array) {
if (index($item, '$n') != -1) {
print "HELLO\n";
}
}
问题是:Perl 评论家给出了以下违反政策的规定。
字符串可能需要在第 168 行,'$item, '$n'' 附近进行插值。(严重性:1)
请告知我该如何解决这个问题?
for my $item (@array) {
if (index($item, '$n') != -1) {
print "HELLO\n";
}
}
问题是:Perl 评论家给出了以下违反政策的规定。
字符串可能需要在第 168 行,'$item, '$n'' 附近进行插值。(严重性:1)
请告知我该如何解决这个问题?
在这种情况下,分析器要么发现错误,要么在标记您的代码时完全错误。
您是在寻找文字“ $n ” in $item
,还是寻找什么$n
变量的计算结果?
如果您想查找文字$n字符,那么您的代码没有问题
如果您希望$item
包含存储在$n
变量中的值,则允许对其进行评估,
if (index($item, $n) != -1)
如果确实如此,但$n
也可能包含您需要作为文字字符的其他转义序列或编码(以便抑制它们的评估),那么您可能需要做更多的事情,具体取决于该变量中的确切内容。
如果您确实需要查找$
后面跟着的字符n
(这可以解释故意在变量周围加上单引号的行为),您需要处理警告。
对于违反的特定策略,请参阅Perl::Critic::Policy::ValuesAndExpressions
如果您将单引号或 q// 与包含可能需要插值的未转义元字符的字符串一起使用,此策略会警告您。
为了满足策略,您需要使用双引号并转义$
. qq(\$n)
在我看来,这会将精细的原始代码段变成奇怪的东西。
如果您最终只想让警告静音,请参阅弯曲规则中的文档
一条评论。perlcritic工具 很有用,但您必须正确使用它。它是一个静态代码分析器,它不知道你的程序在做什么,可以这么说;它可以捕捉不良做法,但不能告诉您如何编写程序。它的许多“策略”不适用于特定代码。
它所依据的书在介绍中很好地说明了这一切。合理使用。
当我查看这个问题的来源时,您似乎正在寻找匹配子字符串的索引,因此您需要$n
变量的内容,而不是文字“ $n ”。然后perlcritic
发现代码中的一个错误,使用它的好回报!