Как избежать специальных символов в строке I, интерполировать в регулярное выражение Perl?

У меня есть строка, которая может содержать специальные символы, такие как: $, (, @, #, и т.д. Мне нужно иметь возможность выполнять регулярные выражения в этой строке.

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

Кто-нибудь знает хорошую подпрограмму, которая могла бы с легкостью избежать любого из этих символов для меня, чтобы позже я мог сделать что-то вроде:

 $p_id =~ /^$key/

Ответ 1

$p_id =~ /^\Q$key\E/;

Ответ 2

Из вашего описания это звучит так, будто у вас есть это назад. Вам не нужно избегать символов в строке, которую вы сопоставляете ($ p_id), вам нужно избежать строки соответствия "^ $key".

Дано:

$p_id = '$key$^%*&#@^&%$blah!!';

Использование:

$p_id =~ /^\$key/;

или

$p_id =~ /^\Q$key\E/;

Пара\Q,\E обрабатывает все, что находится между буквами. Другими словами, вы не хотите искать содержимое переменной $key, но фактическую строку "$ key". Первый пример просто ускользает от $.