Курс Raku / Розширені / Докладніше про вбудовані типи / Конструкції квотування 🆕
Heredoc-рядки
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-и є природним вибором для шаблонів, повідомлень і будь-якого блоку тексту, що займає кілька рядків.
Навігація курсом
← Тест — Адверби квотування | Сирий рядок →
💪 Або перейдіть одразу до вправ цього розділу.