Привязка к началу и концу строк и текста
Мнимые символы \A, \Z и \z не зависят от установок модификаторов и работают всегда одинаково. Не таковы якоря ^ и $, работа которых зависит от модификатора m. В зоне, где модификатор m отключен, якорь ^ соответствует якорю \A, а якорь $ - якорю \Z. Рассмотрим такой пример:
$_="a\r\n"; print '1' if m'a\r$\n';
Здесь я использовал в качестве ограничителей регулярного выражения апострофы, чтобы не было попытки интерполяции специальной переменной $\. Метасимвол $ стоит перед символом \n, который является последним в тексте, и на печать выйдет единица.
Если переставить символ $ перед символом \r:
$_="a\r\n"; print '1' if m'a$\r\n';
то поиск закончится неудачей, потому что здесь $ не стоит непосредственно перед символом \n.
Теперь вернемся к первому примеру и добавим в конце текста какой-нибудь символ:
$_="a\r\nb"; print '1' if m'a\r$\n';
В этом случае поиск вновь завершится неудачно, потому что символ \n здесь уже не последний в тексте. Но если поставить модификатор m, то поиск закончится удачей:
$_="a\r\nb"; print '1' if m'a\r$\n'm;
Теперь такой пример:
$_="a\n"; print '1' if /'a\n^/m;
Единица напечатана не будет, потому что якорь ^ не совпадает после символа \n, если он стоит последним в тексте, и модификатор m здесь не поможет. Но если после \n поставить еще символ:
$_="a\n\n"; print '1' if m'a\n^'m;
то совпадение будет найдено. Теперь в последнем примере уберем модификатор m:
$_="a\n\n"; print '1' if /a\n^/;
Совпадения шаблона тексту уже не будет, т.к. без модификатора m якорь ^ совпадает только в начале текста.