Ответ 1
Смотрите документацию RegExp Quote-Like Operators: они идентичны. m
"версия" позволяет использовать в качестве разделителя другие символы вместо /
. Но кроме этого никакой разницы.
Существует ли какая-либо техническая разница между следующими сегментами кода в perl? Кажется, они ведут себя одинаково.
my $str = "A cat is red";
if($str =~ /cat/) {
print "Matches\n";
}
против
my $str = "A cat is red";
if($str =~ m/cat/) {
print "Matches\n";
}
Разница в этом коде - это "m" в строке 3. Почему кто-то пропускает или не пропускает "m"?
Смотрите документацию RegExp Quote-Like Operators: они идентичны. m
"версия" позволяет использовать в качестве разделителя другие символы вместо /
. Но кроме этого никакой разницы.
Нет никакой разницы.
/.../
сокращен для m/.../
, так же как '...'
является коротким для q'...'
, а "..."
является коротким для qq"..."
.
Если вы собираетесь использовать разделитель по умолчанию (/
для соответствия регулярных выражений, '
для строковых литералов с одной кавычкой и "
для строковых литералов с двойными кавычками), вы можете опустить ведущую букву ( с).
Указание ведущей буквы (букв) позволяет вам изменить разделитель.
/.../ m/.../ m!...! m{...} Match operator
'...' q'...' q!...! q{...} Single-quoted string literal
"..." qq"..." qq!...! qq{...} Double-quoted string literal
Это может быть полезно для уменьшения экранирования. Например,
/^http:\/\//
более ясен, когда записывается как
m{^http://}
В противном случае "m", "q" или "qq" обычно опускаются. "s", "tr" и "qw" необязательны.
Все это описано в perlop.