Курс языка программирования Raku / Продвинутый уровень / Контейнеры / Специальные и динамические переменные

Встроенные специальные переменные

Raku предоставляет набор предопределённых переменных. Большинство из них динамические (с твигилом *), поэтому — как вы видели на примере динамических переменных — вы можете читать их где угодно и даже перекрывать их для определённой области видимости. Вот те из них, которые вам понадобятся чаще всего.

Стандартные потоки

Ввод и вывод проходят через три динамические переменные: $*OUT (стандартный вывод), $*ERR (стандартный поток ошибок) и $*IN (стандартный ввод). say и print пишут в $*OUT; чтобы отправить текст в стандартный поток ошибок, вызовите метод у $*ERR:

$*OUT.say('normal output'); # goes to standard output
$*ERR.say('a diagnostic');  # goes to standard error

Поскольку эти переменные динамические, перенаправление $*OUT в блоке направляет вывод всего, что вызывается внутри этого блока, в новое место назначения — без изменения какого-либо кода.

Программа и её процесс

Несколько переменных описывают саму запущенную программу:

say $*PROGRAM-NAME; # the path of the script being run
say $*PID;          # the process id of this program
say $*CWD;          # the current working directory

Их значения меняются от запуска к запуску, поэтому фиксированный вывод здесь не показан.

Командная строка и окружение

Аргументы и окружение поступают в два готовых контейнера:

  • @*ARGS — список аргументов командной строки (те же, которые получает подпрограмма MAIN)
  • %*ENV — переменные окружения в виде хэша
say @*ARGS.elems; # how many arguments were passed
say %*ENV<HOME>;  # the value of the HOME environment variable

Эти встроенные переменные избавляют вас от необходимости настраивать ту же информацию вручную. А поскольку они динамические и ищутся по стеку вызовов, любую встроенную переменную с $* можно перекрыть для области видимости точно так же, как и собственную переменную с $*.

Помимо этих динамических переменных, в Raku также есть встроенные переменные времени компиляции с твигилом ?$?FILE и $?LINE — с которыми вы уже познакомились на странице о твигилах.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Тест — Динамические переменные   |   Тест — Специальные переменные


💪 Или перейдите сразу к упражнениям этого раздела.