В этом случае анализатор либо обнаружил ошибку, либо неправильно указал ваш код.
Ищете литерал " $ n " в $item
или для какой переменной $n
оценивается значение?
Если вы хотите найти буквальные $ n символов, то в вашем коде нет ничего плохого
Если вы ожидаете, что $item
будет содержать значение, хранящееся в переменной $n
, тогда разрешите его оценить,
if (index($item, $n) != -1)
Если это действительно так, но $n
также может содержать еще другие экранированные последовательности или кодировки, которые вам нужны в качестве буквенных символов (чтобы подавить их оценку), вам может потребоваться сделать немного больше, в зависимости от того, что именно может быть в этой переменной.
В случае, если вам нужно найти символы $
, за которыми следует n
(что объясняет преднамеренный акт размещения одинарных кавычек вокруг переменной), вам нужно обработать предупреждение.
О конкретной нарушенной политике см. Perl :: Critic :: Policy :: ValuesAndExpressions
Эта политика предупреждает вас, если вы используете одинарные кавычки или q // со строкой с неэкранированными метасимволами, которые могут нуждаться в интерполяции.
Чтобы выполнить политику, вам нужно использовать двойные кавычки и экранировать $
, например qq(\$n)
. На мой взгляд, это изменило бы прекрасный оригинальный фрагмент кода на что-то странное, чтобы на него смотреть.
Если вы захотите просто отключить предупреждение, см. Документацию в Bending the Rules
Комментарий. Инструмент perlcritic полезен, но вы должны использовать его правильно. Это статический анализатор кода, и он не знает, что делает ваша программа, так сказать; он может уловить плохие практики, но не может сказать вам, как писать программы. Многие из его «политик» не подходят для конкретного кода.
Книга , основанная на , очень хорошо рассказывает об этом в своем вступлении. Используйте разумно.
Когда я смотрю на вопрос , откуда это происходит, выясняется, что вы ищете индекс, по которому сопоставляются подстроки, поэтому вам нужно содержимое переменной $n
, а не литерал " $ п ». Затем perlcritic
выявил ошибку в коде, хороший возврат для его использования!