Курс языка программирования Raku / Продвинутый уровень / Подробнее о встроенных типах / Конструкции кавычек
Наречия кавычек
Поведение конструкции цитирования можно настроить с помощью
наречий. Каждая функция цитирования — интерполяция скаляров,
выполнение встроенных замыканий, обработка обратных косых черт —
управляется своим собственным наречием, которое включает или выключает
именно эту функцию, так что вы можете начать с q или
Q и добавить ровно те возможности, которые вам нужны.
Некоторые распространённые наречия:
:s/:scalar— интерполировать скалярные переменные ($x):c/:closure— интерполировать встроенный код в{ … }:b/:backslash— обрабатывать управляющие последовательности с обратной косой чертой, такие как\n
Добавьте одно к q, чтобы включить отдельную функцию.
Например, разрешить встроенный код, но ничего больше:
say q/result: {3 * 4}/; # result: {3 * 4} — plain q leaves the block untouched
say q:c/result: {3 * 4}/; # result: 12 — :c runs the blockС простым q блок { 3 * 4 } выводится как
есть; только :c заставляет блок выполниться и подставляет
его значение, тогда как $переменная по-прежнему останется
нетронутой. Обратите внимание на разделители /…/ здесь:
если бы строка была ограничена {…}, парсер бы всё равно
справился — компилятор корректно считает вложенные фигурные скобки — но
тогда внутренний { 3 * 4 } был бы прочитан как часть
ограниченного текста, а не как замыкание, поэтому :c
оставил бы его буквально. Когда текст содержит блок { … },
выбирайте разделитель, отличный от {…}, чтобы замыкание
действительно выполнилось. Вы можете добавить интерполяцию скаляров к
иначе буквальному Q:
my $name = 'Anna';
say Q:s{Hi, $name}; # Hi, AnnaНаречия также выключают функции с помощью
!. Чтобы использовать qq, но оставить
$ буквальным:
my $price = 5;
say qq:!s{costs $price dollars}; # costs $price dollarsqq эквивалентен Q со всеми включёнными
наречиями интерполяции, а q эквивалентен Q с
меньшим набором. Наречия дают вам тонкий контроль между этими двумя
крайностями.
Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест — Кавычки | Тест — Наречия кавычек →
💪 Или перейдите сразу к упражнениям этого
раздела.