Как исправить 'возможную непреднамеренную интерполяцию $ \ in regex'? - PullRequest
0 голосов
/ 21 декабря 2018

На работе у меня есть этот старый скрипт, автора которого больше нет в компании.Сам скрипт прекрасно работает, но каждый раз, когда я его запускаю, я получаю следующее предупреждение:

Possible unintended interpolation of $\ in regex at /bin/script line 223.
Possible unintended interpolation of $\ in regex at /bin/script line 226.

Две отмеченные мной строки соответствуют:

sub get_modul {

...

    open (IN, "path/to/file") || Pl_Fatal ("Error trying to open file");
    $tempvar = <IN>;
    close (IN);
    @temp = split(":", $tempvar);
    if ($#temp != 1) {
       $MODUL =~ s/$\$2\///;   # <--
    }
    else {
        $MODUL =~ s/$\$0\///;  # <--
    }
}

По мере полученияпредупреждение для обеих строк, которые исключают друг друга. Я думаю, что это не имеет ничего общего с вводом, но на всякий случай:

скрипт анализирует :server:user@host:/path/to/rep или /path/to/rep, а вывод в обоих случаях: /path/to/rep.

Я использую Perl v5.18.2, если это поможет.

1 Ответ

0 голосов
/ 21 декабря 2018

Это предупреждение объяснено в perldiag .

Возможная непреднамеренная интерполяция $ \ in regex

(W неоднозначно) Высказал что-то вроде m/$\/ в регулярном выражении.Регулярное выражение m/foo$\s+bar/m переводится в: соответствует слову 'foo', разделителю выходных записей (см. $ \ In perlvar) и букве 's' (один раз или более), за которой следует слово 'bar'.

Если это именно то, что вы намеревались, тогда вы можете отключить предупреждение, используя m/${\}/ (например: m/foo${\}s+bar/).

Если вместо этого вы намеревались найти совпадение со словом 'foo' в концеВ следующей строке следует пробел и слово «bar», после чего вы можете использовать m/$(?)\/ (например: m/foo$(?)\s+bar/).

$\ - разделитель выходных записей.Это то, что Perl автоматически добавляет ко всему, что вы выводите, используя print().Значением по умолчанию является undef.

Итак, в вашем регулярном выражении , вероятно, ничего не делает (так как undef становится пустой строкой, когда используется в строке).Но невозможно быть уверенным, не увидев остальную часть кода - так как вы можете изменить значение $\ в другом месте программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...