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