La variabile si $/riferisce alla corrispondenza più recente mentre la variabile si $¢riferisce alla corrispondenza più recente più recente. Nella maggior parte delle regex di base come sopra, può essere la stessa cosa. Ma come si può vedere dall'output del .rakumetodo, gli Matchoggetti possono contenere altri Matchoggetti (questo è ciò che si ottiene quando si utilizza $<foo>o $1per le acquisizioni).
Supponiamo invece di avere la seguente regex con una cattura quantificata
/ ab (cd { say $¢.from, " ", $¢.to } ) + /
E se funzionasse vedrebbe il seguente output se ci abbinassimo a "abcdcdcd":
0 2
0 4
0 6
Ma se passiamo dall'uso $¢a $/, otteniamo un risultato diverso:
2 2
4 4
6 6
(Il motivo per cui .tosembra essere un po 'spento è che —e-- .posnon vengono aggiornati fino alla fine del blocco di acquisizione.)
In altre parole, $¢farà sempre riferimento a quello che sarà il tuo oggetto di corrispondenza finale (ovvero, $final = $text ~~ $regex) in modo da poter attraversare un albero di acquisizione complesso all'interno del regex esattamente come faresti dopo aver terminato la corrispondenza completa Quindi nell'esempio sopra, potresti semplicemente fare $¢[0]riferimento alla prima partita, $¢[1]alla seconda, ecc.
All'interno di un blocco di codice regex, $/farà riferimento alla corrispondenza più immediata. Nel caso sopra, questa è la partita all'interno ( )e non saprà delle altre partite, né l'inizio originale della corrispondenza: solo l'inizio del ( )blocco. Quindi dai una regex più complessa:
/ a $<foo>=(b $<bar>=(c)+ )+ d /
Possiamo accedere in qualsiasi momento usando $ ¢ tutti i footoken dicendo $¢<foo>. Possiamo accedere ai bartoken di un dato foousando $¢<foo>[0]<bar>. Se inseriamo un blocco di codice all'interno foodell'acquisizione, sarà in grado di accedere ai bartoken utilizzando $<bar>o $/<bar>, ma non sarà in grado di accedere ad altri foo.
$/e$¢è ambito: quest'ultimo ha solo un valore all'interno della regex", il che significa che$¢era semplicemente una traccia rudimentale, così comeCursorè. Quando ho letto la tua risposta ho pensato$¢che$*TOPavrei creato il possibile miglioramento? sezione della mia risposta alla comunicazione degli addebiti "Perché / come è necessaria una variabile aggiuntiva per abbinare il carattere arbitrario ripetuto ai gruppi di cattura?". Ma i miei tentativi di sostituzione$*TOPcon$¢falliti. Capisci il mio punto in quella risposta? Puoi farlo funzionare?