Граница слова - это контекстно-зависимая конструкция регулярного выражения.Когда за ним следует слово char (буква, цифра или _
), этому местоположению должен предшествовать либо начало строки, либо не состоящее из слова char.В этом конкретном случае за границей слова следует символ, не содержащий слова char, и поэтому требуется, чтобы слово char отображалось непосредственно перед этим символом.
Вы можете использовать не двусмысленную границу слова, выраженную с отрицательным взглядом сзади:
my $regex = qr/(?<!\w)($RE{num}{real})/;
^^^^^^^
Отрицательный внешний вид (?<!\w)
всегда обозначает одну вещь: провалить совпадение, если слева от текущего местоположения нет символа слова.
Или используйте границу пробелаесли вы хотите, чтобы ваши совпадения появлялись только после пробела или начала строки:
my $regex = qr/(?<!\S)($RE{num}{real})/;
^^^^^^^