Курс по 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 тест върху съдържанието на тази тема.

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

Тест — Динамични променливи   |   Тест — Специални променливи


💪 Или преминете направо към упражненията в този раздел.