Perl - заменить соответствие регулярному выражению произвольной операцией над регулярным выражением - PullRequest
4 голосов
/ 18 декабря 2010

В моем скрипте Perl есть следующая строка:

s/\b(\w+)\b/ $replaces{$1} ? $replaces{$1} : $1 /g;

Я хочу найти все слова в строке, и если слово находится в массиве известных слов, заменить его, иначе оставить его (в идеале я хочу выполнить произвольную операцию с соответствием, а не просто троичный оператор).

Для этого я пытаюсь использовать троичный оператор. Perl лечит? и: как буквальный символ и просто объединяет их с переменными (если они определены).

Как заставить Perl обрабатывать ?: внутри замены как троичный оператор?

P.S .: Я знаю, что могу просто выполнить операцию сопоставления в следующей строке кода, но для ясности я хочу оставить для нее одну строку.

1 Ответ

9 голосов
/ 18 декабря 2010

Вам нужен квалификатор 'e' (выполнить):

s/\b(\w+)\b/ $replaces{$1} ? $replaces{$1} : $1 /ge;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...