Змінна $/відноситься до останнього збігу, тоді як змінна $¢- до останнього зовнішнього збігу. У більшості основних регексів, як у наведених вище, це можуть бути одні й ті ж. Але як видно з результатів .rakuметоду, Matchоб'єкти можуть містити інші Matchоб’єкти (саме це ви отримуєте при використанні $<foo>або $1для захоплення).
Припустимо, замість цього у нас був такий регекс з кількісно визначеним захопленням
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
І запустивши, він побачив би такий результат, якби ми співставились з "abcdcdcd":
0 2
0 4
0 6
Але якщо ми переходимо від звичного $¢до $/, ми отримуємо інший результат:
2 2
4 4
6 6
(Причина, .toздається, трохи відключена, полягає в тому, що вона —і .pos- не оновлюються до кінця блоку захоплення.)
Іншими словами, завжди$¢ буде посилатися на те, що буде вашим кінцевим об'єктом відповідності (тобто ), щоб ви могли пройти складне дерево захоплення всередині регексу точно так само, як і після завершення повного матчу. Отже, у наведеному вище прикладі ви могли просто робити для позначення першого матчу, другого тощо.$final = $text ~~ $regex$¢[0]$¢[1]
Всередині блоку коду регулярних виразів $/буде позначатися найвідповідніша відповідність. У вищенаведеному випадку це збіг всередині ( )та не дізнається про інші матчі, а також про початковий збіг: лише початок для ( )блоку. Тому дайте більш складний регулярний вираз:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Ми можемо отримати доступ до будь-якої точки, використовуючи $ ¢ всі fooжетони, сказавши $¢<foo>. Ми можемо отримати доступ до barжетонів даної особи fooза допомогою $¢<foo>[0]<bar>. Якщо ми вставимо блок коду всередині fooзапису, він зможе отримати доступ до barмаркерів за допомогою $<bar>або $/<bar>, але він не зможе отримати доступ до інших foos.
$/та$¢сферою дії: останній має лише значення всередині регулярного вираження", тобто означає, що$¢це просто вестигіальний слід, як іCursorє. Коли я прочитав вашу відповідь, я подумав,$¢що це$*TOPя створив у Можливому вдосконаленні? розділ моєї відповіді на ВО "Чому / як потрібна додаткова змінна для узгодження повторного довільного символу з групами захоплення?". Але мої спроби замінити$*TOPна$¢не вдалися. Ви розумієте мою думку в цій відповіді? Чи можете ви змусити це працювати?