Цитирование метасимволов
Метасимволы в управляющих последовательностях Perl являются буквенно - цифровыми, такими , как \b, \w,
\n. В отличие от некоторых других языков регулярных выражений, здесь нет символов обратной косой черты, которые не являются буквенно-цифровыми. Поэтому все , что выглядит как \\, \(, \), \[, \], \{, или \}всегда интерпретируется как буквенный символ, а не метасимволы. Когда-то это использовалось в общей идиоме, чтобы отключить или заключить в кавычки специальные значения метасимволов регулярных выражений в строке, которую вы хотите использовать для шаблона. Просто процитируйте все не «слова» символы:
$pattern =~ s/(\W)/\\$1/g;
(Если use localeустановлено, то это зависит от текущей локали.) Сегодня более распространено использовать quotemetaфункцию или \Q
escape-последовательность мета-цитирования, чтобы отключить специальные значения всех метасимволов, например:
/$unquoted\Q$quoted\E$unquoted/
Имейте в виду, что если вы поместите буквенные обратные слэши (те, которые не входят в интерполированные переменные) между \Qи \E, двойная квотированная обратная косая черта может привести к путанным результатам. Если вам нужно использовать обратную косую черту внутри \Q...\E, проконсультируйтесь с «Gory details of синтаксический анализ цитируемых конструкций» в perlop .
quotemetaи \Qполностью описаны в цитате .
grep '^$1'? Или вы не имели в виду, что хотите предотвратить$1расширение оболочки?