Нарушение политики критики Perl при проверке индекса подстроки в строке - PullRequest
0 голосов
/ 30 апреля 2018
for my $item (@array) {
    if (index($item, '$n') != -1) {
       print "HELLO\n";
    }
} 

Проблема в том, что Perl-критик выдает нарушение политики ниже.

Строка может потребовать интерполяции в строке 168 рядом с $ item, $ n. (Серьезность: 1)

Посоветуйте, пожалуйста, как мне это исправить?

1 Ответ

0 голосов
/ 30 апреля 2018

В этом случае анализатор либо обнаружил ошибку, либо неправильно указал ваш код.

Ищете литерал " $ 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 выявил ошибку в коде, хороший возврат для его использования!

...