for my $item (@array) {
if (index($item, '$n') != -1) {
print "HELLO\n";
}
}
问题是:Perl评论家给出了以下政策违规行为。
字符串可能需要在第168行插值,接近'$ item,'$ n''。 (严重程度:1)
请告知我该如何解决这个问题?
答案 0 :(得分:3)
在这种情况下,分析器会发现错误或标记代码时出现明显错误。
您是否正在寻找文字" $ n "在$item
中,或$n
变量评估为什么?
如果您想找到文字 $ n 字符,那么您的代码没有任何问题
如果您希望$item
包含$n
变量中存储的值,则允许对其进行评估,
if (index($item, $n) != -1)
如果情况确实如此,但$n
可能还包含其他需要作为文字字符的转义序列或编码(因此要抑制其评估),那么您可能需要做更多的事情,具体取决于什么确切地说可能在那个变量中。
如果您确实需要查找字符$
后跟n
(这可以解释在变量周围放置单引号的故意行为),您需要处理警告。
对于违反的特定政策,请参阅Perl::Critic::Policy::ValuesAndExpressions
如果您使用单引号或q //使用具有可能需要插值的未转义元字符的字符串,则此策略会发出警告。
要满足该政策,您需要使用双引号并转义$
,例如qq(\$n)
。在我看来,这会将优秀的原始代码段改变成一些奇怪的东西。
如果您最终希望简单地将警告静音,请参阅Bending The Rules
中的文档评论。 工具 perlcritic很有用,但您必须正确使用它。它是一个静态代码分析器,它不知道你的程序正在做什么,所以说;它可以捕获不良做法,但不能告诉你如何编写程序。它的许多政策"不适合特定代码。
book that it is based on在介绍中非常好地说明了这一切。合理使用。
当我查看question来自哪里时,您似乎正在寻找匹配子字符串的索引,因此您需要$n
变量的内容,而不是文字" $ N &#34 ;.然后perlcritic
识别出代码中的错误,使用它的好回报!