Cursus Raku / Geavanceerd / Meer over ingebouwde types / Aanhalingsconstructies
Heredocs
Een heredoc is een quoting-vorm voor tekst over meerdere
regels. In plaats van scheidingstekens om de tekst heen, geef je een
afsluitwoord op met :to, en de string loopt vanaf de
volgende regel tot een regel die alleen dat woord bevat:
my $text = q:to/END/;
Hello,
World!
END
print $text;Dit drukt af:
Hello,
World!Het afsluitwoord (END hier — elk woord is mogelijk)
markeert waar de tekst eindigt. Let op de print: de tekst
behoudt de nieuwe regel die voor het afsluitwoord staat, dus hij eindigt
al met een regelafbreking — het gebruik van say zou er een
tweede toevoegen en een lege regel aan het einde achterlaten. Omdat de
heredoc begint met q:to, wordt de tekst niet
geinterpoleerd; gebruik qq:to om variabelen te
interpoleren:
my $name = 'Anna';
my $greeting = qq:to/EOF/;
Dear $name,
Welcome!
EOF
print $greeting;Een nuttig detail: de inspringging van het afsluitende afsluitwoord wordt van elke regel van de tekst verwijderd. Hierdoor kun je een heredoc laten inspringen om aan te sluiten bij de omringende code zonder dat die inspringging in de string terechtkomt:
sub greeting {
return q:to/END/;
Hello,
World!
END
}
print greeting;Dit drukt hetzelfde Hello, en World! af als
het eerste voorbeeld. Hier is het afsluitende END acht
spaties ingesprongen, dus acht spaties worden van elke regel verwijderd,
en de teruggegeven string is gewoon Hello,\nWorld! zonder
voorloopspaties.
Het afsluitende afsluitwoord bepaalt hoeveel er wordt verwijderd, dus elke regel van de tekst moet minstens zo ver zijn ingesprongen. Als een regel minder voorloopspaties heeft, kan Raku niet de volledige hoeveelheid verwijderen en geeft een waarschuwing — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Houd het afsluitwoord niet dieper dan de minst ingesprongen regel om dit te voorkomen. Heredocs zijn de natuurlijke keuze voor sjablonen, berichten en elk blok tekst dat meerdere regels beslaat.
Cursusnavigatie
← Quiz — Aanhalingsadverbia | Een onbewerkte string →
💪 Of ga direct naar
de oefeningen in deze sectie.