Курс по Raku / Напреднали / Повече за вградените типове / Конструкции за цитиране 🆕

Heredocs

Heredoc е форма на цитиране за многоредов текст. Вместо разделители около текста, задавате терминиращо слово с :to и низът продължава от следващия ред до ред, съдържащ само това слово:

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

print $text;

Това отпечатва:

Hello,
World!

Терминаторът (END тук — всяка дума е подходяща) маркира къде свършва текстът. Обърнете внимание на print: текстът запазва новия ред, който стои преди терминатора, така че вече завършва с край на ред — използването на say би добавило втори и би оставило празен ред в края. Тъй като heredoc-ът започва с q:to, текстът не се интерполира; използвайте qq:to за интерполиране на променливи:

my $name = 'Anna';

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

print $greeting;

Полезен детайл: отстъпът на затварящия терминатор се премахва от всеки ред на текста. Това ви позволява да отместите heredoc-а, за да съвпада с обкръжаващия код, без този отстъп да попадне в низа:

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

print greeting;

Това отпечатва същото Hello, и World! като първия пример. Тук затварящият END е отместен с осем интервала, така че осем интервала се премахват от всеки ред и върнатият низ е просто Hello,\nWorld! без водещи интервали.

Затварящият терминатор определя колко се премахва, така че всеки ред от текста трябва да е отместен поне толкова. Ако даден ред има по-малко водещи интервали, Raku не може да премахне пълното количество и предупреждава — Asked to remove 8 spaces, but the shortest indent is 4 spaces. Дръжте терминатора не по-навътре от най-плиткия ред, за да избегнете това. Heredoc-ите са естественият избор за шаблони, съобщения и всякакъв блок текст, който обхваща няколко реда.

Навигация в курса

Тест — Наречия за цитиране   |   Суров низ


💪 Или преминете направо към упражненията в този раздел.