Corso di Raku / Avanzato / Altro sui tipi predefiniti / Costrutti di quoting / Exercises / Un heredoc

Soluzione: Un heredoc

Ecco una possibile soluzione.

Codice

my $name  = 'Anna';
my $item  = 'Raku Book';
my $price = 25;
my $count = 3;

print qq:to/END/;
    Dear $name,
    You ordered $count copies of "$item".
    That comes to {$count * $price} dollars.
    Thank you!
    END

🦋 Puoi trovare il codice sorgente nel file a-heredoc.raku.

Output

Dear Anna,
You ordered 3 copies of "Raku Book".
That comes to 75 dollars.
Thank you!

Commenti

  1. L’heredoc inizia con qq:to anziché q:to, quindi interpola. Come una stringa qq, inserisce gli scalari — $name, $count, $iteme esegue il codice incorporato: il blocco {$count * $price} calcola 3 * 25, così il totale 75 appare inline.

  2. Le virgolette doppie attorno a "$item" sono solo caratteri letterali qui; dentro un heredoc non c’è nessun delimitatore da cui fare l’escape, quindi vengono stampate così come sono mentre $item viene comunque interpolato.

  3. Il corpo e il terminatore di chiusura END sono indentati degli stessi quattro spazi. L’indentazione del terminatore viene rimossa da ogni riga, quindi quei quattro spazi non raggiungono mai la stringa — l’output inizia dal margine sinistro.

  4. L’heredoc termina già con un carattere di nuova riga, quindi viene usato print anziché say per evitare di aggiungere una seconda riga vuota.

Un heredoc   |   Data e ora