Почему Perl-функция quotemeta () ведет себя по-разному в режиме отладчика? - PullRequest
4 голосов
/ 28 июля 2010

Меня укусило это маленькое противоречивое поведение отладчика.Кажется, что функция quotemeta() ведет себя по-разному, когда вызывается в perl -d

$ perl -e 'print quotemeta("/a/b/c"),"\n"'

Вывод равен \/a\/b\/c, что является правильным и задокументировано в perldoc -f quotemeta.

Теперь, когда под отладчиком, вывод становится \\/a\\/b\\/c.Я подумал, что какой-то основной модуль, который я использую, переопределяет функцию, хотя, как показало тестирование, поведение возникает только в режиме отладчика.Вызов CORE::quotemeta() возвращает тот же результат.

Может кто-нибудь просветить меня?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 28 июля 2010

quotemeta - дробовик, избегающий всех несловарных персонажей, независимо от того, нужен он им или нет. Отладчик менее жесток; цитируя только тех персонажей, которые в этом нуждаются. (Обратная косая черта выполняется, прямая косая черта - нет.) Более того, она делает это только при проверке значений, а не при их печати. Сравните:

  DB<1> x quotemeta('a/b/c')
0  'a\\/b\\/c'

  DB<2> p quotemeta('a/b/c')
a\/b\/c
3 голосов
/ 28 июля 2010

Я не могу найти ссылку на это, но Perl-отладчик, когда его попросят вывести любую строку, переставит ее в кавычки, так что это безопасное литеральное значение, которое можно вставить в скрипт.Ваша ценность верна;это отладчик, который добавляет обратную косую черту.В perldoc perldebug есть опция quote, вы можете попытаться возиться с этим.

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