2010-11-10 2 views
4

Я новичок в Perl, так это может быть очень глупый вопрос, но я не мог найти :(Есть ли разница между // и m //?

Если у меня есть:.

$stringA =~ /regex/; 
$stringB =~ m/regex/; 

Из моего теста, $stringA = $stringB Есть ли разница между ними?

Спасибо.

+3

Не рекомендуется использовать '$ a' и' $ b' как имена переменных, так как они обрабатываются Perl специальным образом. – Zaid

+3

для справки, избегайте использования '$ a' и' $ b', см. Http://perldoc.perl.org/perlvar.html –

ответ

0

Они одинаковы.

Оператор матча. Приступая к открытию разделителя, это оператор «матч». Это означает чтение строкового выражения слева от = ~ и посмотреть, соответствует ли какая-либо его часть выражению в разделителях, следующих за m. Обратите внимание, что если разделители являются слэшами (что является нормальным состоянием дел), m является необязательным и часто не включается. Является ли это там или нет, это все еще операция состязания.

Source

+1

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и укажите ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – LaGrandMere

+0

@LaGrandMere Спасибо за информацию. Я исправил свой ответ. Вы не возражаете против голосования? Благодарю. – jordanbtucker

+1

Я не сделал ни слова, я просто поставил комментарий, чтобы получить лучший ответ для OP ... Поскольку вы обновили свой ответ, я собираюсь продвинуться :) – LaGrandMere

7

m/PATTERN/ и /PATTERN/ являются одинаковыми.

См. this part руководства пользователя perlop (perl). Прокрутите вниз до раздела на m/PATTERN/, вы увидите, что он также известен как /PATTERN/

9

Это сокращенное обозначение. Вы можете опустить m, когда используете разделители //. Обратите внимание, что вы также можете использовать другие символы для разделения, как !, но тогда вам нужно использовать м:

if ($something =~ m!//this/has/a/ton/of//characters/in/it!) 

Это часто лучше, чтобы сделать это, так как это экономит писать \/\/ снова и снова, что вы должны были бы делаем если вы использовали //.

+5

При выборе собственных разделителей не забудьте что '' 'и'? 'имеют специальные значения при использовании с' m'. См. [Perlop] (http://perldoc.perl.org/perlop.html#m/PATTERN/msixpogc). – cjm

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