2013-05-28 5 views
4

У меня есть простой линии PerlПобег знак доллара внутри переменной

s/$var/'string'/g 

Проблема в том, что $ переменная содержит строку, как jkdlsf$lkjl. Обратите внимание на знак доллара посередине. Кажется, из-за этого знака доллара замена не работает. Как избежать этого, когда он находится внутри переменной?

ответ

0

Вы можете избежать их обратным слэшем: $var=~s/\$/\\\$/g

+1

не отвечает на мой вопрос , – evolution

+0

@evolution Ваш вопрос: «Как избежать этого, когда он находится внутри хранимой переменной?» и приведенный выше ответ вам точно подскажет. –

+0

Используйте '\ Q ... \ E', если вы ничего не хотите в интерпретации $ var. Используйте описанный выше метод, если вы хотите, чтобы только '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' Если вы за чем-то другим, я боюсь, что не знаю, о чем вы спрашиваете. – Sysyphus

10

Используйте \Q цитату:

s/\Q$var/'string'/g 
+0

Точно.) Вот довольно [полезная статья] (http://www.effectiveperlprogramming.com/blog/1496) об этом. – raina77ow

+0

@ raina77ow жалость ссылка не работает. Я пришел сюда, ища смысл '\ Q'. Есть ли другие объяснения? – fedorqui

+1

@fedorqui: [perlre] (http://p3rl.org/perlre) – choroba

5

Использование quotemeta или \Q и \E встроенных регулярных выражений конструкций:

s/\Q$var\E/'string'/g; 

# or 

my $var = quotemeta 'jkdlsf$lkjl'; 
s/$var/'string'/g; 
+0

Да, это объясняет довольно хорошо и отлично работает. Спасибо, мил. – evolution

Смежные вопросы