Что-то я затупил... Почему Wans находится, а Mans нет??
while (<DATA>) {
print "=== Mans\n" if m'I\/Ians';
print "=== Wans\n" if m'\/Vans';
}__DATA__
I\/Ians
\/VansНа всякий случай:
$ perl -vThis is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
Тонкости интерпретации. В начале выражение в одинарных кавычках читается как лексема языка (то есть в нашем случае буквально), а потом полученная строка обрабатывается интерпретатором регулярных выражений, который понятия не имеет, какие там были кавычки — не его это дело.'\/' — это интерпретатор понимает как «символ /»
'I\/Ians' — а это, соответственно, как «символы I / I a n s»
В этом нетрудно убедиться, дописав в секцию __DATA__ строчку «I/Ians»
Вообще же, советую по возможности избегать конструкций вида m'...', используя более привычные m/.../ или m{...}.
> Тонкости интерпретации. В начале выражение в одинарных кавычках читается как лексема [...]
> Вообще же, советую по возможности избегать конструкций вида m'...', используя более
> привычные m/.../ или m{...}.Про одинарные кавычки perlre говорит, что RE будет восприниматься буквально, переменные не раскрываются. Для того они там и поставлены. К сожалению ни звука про \.
Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это всегда происходит со всякими \}?
> Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это
> всегда происходит со всякими \}?Можно: m/a\\b/ соответствует строке «a\b», но не «a\\b»
> Переформулирую вопрос - можно ли заставить m// воспринимать \ буквально, как это
> всегда происходит со всякими \}?m/\\/;
?