Алгоритм работы операторов m// и s///
В языке Perl есть такое понятие - контекст выражения. Операторы могут возвращать значение, которое зависит от того, чему оно присваивается. Если оно присвавается скалярной переменной, то возвращаемое значение может быть одно, а если присвоение происходит массиву, то возвращаться может уже список значений. Таким является оператор m//. Например, если мы используем его в условии условного оператора:
if (m/…/) { … }
то это скалярный контекст, т.к. в условии ожидается одно значение, которое трактуется как истина или ложь. А если написать
my @m=m/…/;
то это списковый контекст, в котором оператор m// возвратит список значений. Оператор print является списковым, т.к. он ожидает список в качестве своего аргумента, поэтому, если написать
print m/…/;
то это также будет использование оператора поиска в списковом контексте.