Raku-Kurs / Fortgeschritten / Mehr über eingebaute Typen / Quoting-Konstrukte

Heredocs

Ein Heredoc ist eine Quoting-Form für mehrzeiligen Text. Anstelle von Trennzeichen um den Text herum gibst du mit :to ein Abschlusswort an, und der String reicht von der nächsten Zeile bis zu einer Zeile, die nur dieses Wort enthält:

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

print $text;

Die Ausgabe ist:

Hello,
World!

Das Abschlusswort (END hier — jedes Wort ist möglich) markiert, wo der Text endet. Beachte das print: Der Text behält den Zeilenumbruch, der vor dem Abschlusswort steht, sodass er bereits mit einem Zeilenumbruch endet — say würde einen zweiten hinzufügen und eine zusätzliche Leerzeile erzeugen. Da das Heredoc mit q:to beginnt, wird der Text nicht interpoliert; verwende qq:to, um Variablen zu interpolieren:

my $name = 'Anna';

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

print $greeting;

Ein nützliches Detail: Die Einrückung des schließenden Abschlusswortes wird von jeder Zeile des Textes entfernt. So kannst du ein Heredoc passend zum umgebenden Code einrücken, ohne dass diese Einrückung im String landet:

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

print greeting;

Dies gibt dasselbe Hello, und World! wie das erste Beispiel aus. Hier ist das schließende END um acht Leerzeichen eingerückt, also werden acht Leerzeichen von jeder Zeile entfernt, und der zurückgegebene String ist einfach Hello,\nWorld! ohne führende Leerzeichen.

Das schließende Abschlusswort bestimmt, wie viel entfernt wird, daher muss jede Zeile des Textes mindestens so weit eingerückt sein. Wenn eine Zeile weniger führende Leerzeichen hat, kann Raku die volle Menge nicht entfernen und warnt — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Halte das Abschlusswort nicht tiefer eingerückt als die am wenigsten eingerückte Zeile, um dies zu vermeiden. Heredocs sind die natürliche Wahl für Templates, Nachrichten und jeden Textblock, der mehrere Zeilen umfasst.

Kursnavigation

Quiz — Quoting-Adverbien   |   Ein Roh-String


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.