Курс Raku / Розширені / Контейнери / Спеціальні та динамічні змінні 🆕

Вбудовані спеціальні змінні

Raku наперед визначає для вас набір змінних. Більшість із них є динамічними (твіґіл *), тож — як ви бачили з динамічними змінними — їх можна читати будь-де й навіть перекривати в межах області видимості. Ось ті, до яких ви звертатиметеся найчастіше.

Стандартні потоки

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

$*OUT.say('normal output'); # іде в стандартний вивід
$*ERR.say('a diagnostic');  # іде в стандартний потік помилок

Оскільки вони динамічні, перенаправлення $*OUT у блоці спрямовує вивід усього, що викликано всередині цього блоку, до нового призначення — без жодних змін у тому коді.

Програма та її процес

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

say $*PROGRAM-NAME; # шлях до скрипта, який виконується
say $*PID;          # ідентифікатор процесу цієї програми
say $*CWD;          # поточний робочий каталог

Їхні значення змінюються від запуску до запуску, тож сталого виводу тут не наведено.

Командний рядок і середовище

Аргументи та середовище надходять у двох готових контейнерах:

  • @*ARGS — список аргументів командного рядка (тих самих, які отримує підпрограма MAIN)
  • %*ENV — змінні середовища у вигляді хеша
say @*ARGS.elems; # скільки аргументів було передано
say %*ENV<HOME>;  # значення змінної середовища HOME

Ці вбудовані змінні позбавляють вас необхідності збирати ті самі відомості вручну. А оскільки вони динамічні й шукаються через стек викликів, будь-яку вбудовану змінну з $* можна перекрити в області видимості точно так само, як власну змінну з $*.

Поряд із цими динамічними змінними Raku має й компіляційні вбудовані змінні з ?$?FILE та $?LINE, — з якими ви вже зустрічалися на сторінці про твіґіли.

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Тест — Динамічні змінні   |   Тест — Спеціальні змінні


💪 Або перейдіть одразу до вправ цього розділу.