При использовании split шаблон задает разделитель (части строки, не содержащие полезных данных). Иногда бывает проще задать тот текст, который вы хотите сохранить. При использовании оператора поиска по шаблону (m//) в списочном контексте возвращаемое значение представляет собой список переменных, созданных для совпадений, или пустой список (если поиск завершился неудачей):
$_ = "Hello there, neighbor!";
my($first, $second, $third) = /(\S+) (\S+), (\S+)/;
print "$second is my $third\n";
Это позволяет легко присвоить переменным понятные удобные имена, которые будут действовать и после следующего поиска по шаблону. (Также обратите внимание на то, что в коде отсутствует оператор =~, поэтому шаблон по умолчанию применяется к $_.) Модификатор /g, впервые встретившийся нам при описании s///, работает и с m//; он позволяет найти совпадение в нескольких местах строки. В этом случае шаблон с парой круглых скобок будет возвращать элемент списка для каждого найденного совпадения:
my $text = "Fred dropped a 5 ton granite block on Mr. Slate";
my @words = ($text =~ /([a-z]+)/ig);
print "Result: @words\n";
# Result: Fred dropped a ton granite block on Mr Slate
Происходящее напоминает «split наоборот»: вместо того что необходимо удалить, мы указываем, что необходимо оставить. Если шаблон содержит несколько пар круглых скобок, для каждого совпадения может возвращаться более одной строки. Предположим, у нас имеется строка, которую необходимо прочитать в хеш:
my $data = "Barney Rubble Fred Flintstone Wilma Flintstone";
my %last_name = ($data =~ /(\w+)\s+(\w+)/g);
При каждом совпадении шаблона возвращаются два частичных совпадения. Эти два совпадения образуют пары «ключ-значение» в создаваемом хеше.