Curso de Raku / Avanzado / Más sobre los tipos integrados / Construcciones de entrecomillado

Heredocs

Un heredoc es una forma de entrecomillado para texto multilínea. En lugar de delimitadores alrededor del texto, se indica una palabra terminadora con :to, y la cadena se extiende desde la siguiente línea hasta una línea que contenga solo esa palabra:

my $text = q:to/END/;
Hello,
World!
END

print $text;

Esto imprime:

Hello,
World!

El terminador (END aquí — cualquier palabra sirve) marca dónde termina el texto. Observa el uso de print: el texto conserva el salto de línea que precede al terminador, por lo que ya termina con un salto de línea — usar say añadiría un segundo y dejaría una línea en blanco al final. Como el heredoc comienza con q:to, el texto no se interpola; usa qq:to para interpolar variables:

my $name = 'Anna';

my $greeting = qq:to/EOF/;
Dear $name,
Welcome!
EOF

print $greeting;

Un detalle útil: la indentación del terminador de cierre se elimina de cada línea del texto. Esto te permite indentar un heredoc para que coincida con el código circundante sin que esa indentación termine en la cadena:

sub greeting {
    return q:to/END/;
        Hello,
        World!
        END
}

print greeting;

Esto imprime lo mismo que el primer ejemplo: Hello, y World!. Aquí el END de cierre está indentado ocho espacios, así que se eliminan ocho espacios de cada línea, y la cadena resultante es simplemente Hello,\nWorld! sin espacios iniciales.

El terminador de cierre establece cuánto se elimina, por lo que cada línea del texto debe estar indentada al menos esa cantidad. Si una línea tiene menos espacios iniciales, Raku no puede eliminar la cantidad completa y muestra una advertencia — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Mantén el terminador a una profundidad igual o menor que la línea menos indentada para evitarlo. Los heredocs son la opción natural para plantillas, mensajes y cualquier bloque de texto que abarque varias líneas.

Quiz — Adverbios de entrecomillado   |   Una cadena cruda


💪 O ve directamente a los ejercicios de esta sección.