Это символ конца строки, который все портит.Пока работает обычное задание:
my $str = "abc";
print "Works" if $str =~ /^.*$/;
... код в вопросе не работает.Это регулярное выражение должно соответствовать любой строке, так как оно также соответствует пустой строке.Даже неопределенные значения будут соответствовать (хотя это вызовет предупреждение).Кроме того, ^.*
соответствует.
Единственное разумное объяснение состоит в том, что по какой-то причине, какая бы проверка ни выполнялась для соответствия концу строки, она не находит ее.Конец строки отсутствует.
Любопытно, что замена $
на \z
работает.Но не \Z
.
Добавление новой строки также работает.Это имело бы смысл, так как добавление новой строки означало бы, что конец строки также добавляется в смысле не-многострочного регулярного выражения.
Я не знаю, как это происходит,но я подозреваю, что при использовании этой конкретной формы «присваивания» в строку никогда не помещается маркер конца строки.Это своего рода «сырое» присваивание, которое путает проверку конца строки в регулярном выражении.
Это похоже на ошибку.Возможно, эта особенность не была должным образом поддержана.