¿Cómo puedo interpolar una variable en una expresión regular de Perl 6?

La sinopsis 05 menciona que Perl 6 no interpola variables en una expresión regular, pero puede asociar una variable externa con un patrón. Los documentos no mencionan esta característica por lo que puedo decir. Creo que la gente todavía va a querer construir un patrón a partir de una cadena de alguna manera, así que tengo curiosidad por saber cómo funcionaría.

Aquí hay un programa que demuestra lo que sucede ahora. No sé si eso es lo que se supone que sucederá o lo que alguien pretendió. Inserto una variable en un patrón. Si miras$r con.perl, ves el nombre de la variable. Luego, aplico el patrón y coincide. Cambio el valor de la variable. Ahora el patrón no coincide. Cámbielo a algo más que funcione, y vuelve a coincidir:

my $target = 'abcdef';

my $n = 'abc';
my $r = rx/ ( <$n> ) /;

# the smart match like this doesn't return a Match object
# https://rt.perl.org/Ticket/Display.html?id=126969
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change $n. The same $r won't match.
$n = 'xyz';

put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

# now, change back $n. The same $r does match.
$n = 'ab';
put 'rx// directly: ',
    $target ~~ $r
        ?? "Matched $0" !! 'Misssed';

Si eso es lo que se supone que debe hacer, está bien. Los documentos son claros aquí, y las pruebas (elde facto spec) no son sofisticados para comportamientos de largo alcance como este.

Podría hacer un trabajo extra para cerrar una copia (y tal vez más trabajo del que muestro dependiendo de lo que haya en$n), que encuentro incorrectamente:

my $r = do {
    my $m = $n;
    rx/ <$m> /;
    };

Pero, todavía me gustaría tener una forma de "finalizar" un patrón (oh Dios mío, acabo de pedir/o volver). Un método enRegex quizás. Creo que la gente buscará esta característica.

my $r = rx/ .... /.finalize;  # I wish!

O bien, Perl 6 tiene una manera mucho mejor de hacer este tipo de cosas y estoy lleno de pensamiento de la vieja escuela. Perl 6 tiene reglas en lugar de expresiones regulares. De hecho, hay un analizador detrás de todo esto. Pensé definir untoken orule podría ser el camino a seguir, pero creo que me encuentro con el mismo problema. No veo qué tener una fábrica de subreglas.

¿Hay alguna otra forma en que podría hacer esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta