Курс по Raku / Обекти, вход-изход и изключения / Вход и изход / Стартиране на външни програми 🆕 / Exercises / Подайте променлива на дъщерен процес

Решение: Подайте променлива на дъщерен процес

Ето едно възможно решение на задачата.

Код

my $file = 'notes.txt';
spurt $file, "one\ntwo\nthree\n";

%*ENV<NOTES> = $file;

my $proc = shell 'wc -l < "$NOTES"', :out;
say $proc.out.slurp(:close).trim;

unlink $file;

🦋 Намерете програмата във файла read-env.raku.

Изход

3

Коментари

  1. spurt създава notes.txt с три реда. Задаването на %*ENV<NOTES> с името му слага името на файла в средата, която всяка дъщерна програма ще наследи.

  2. Командата на shell наследява тази среда, разгъва $NOTES до notes.txt и подава файла на wc -l, който преброява редовете му. Пренасочването < "$NOTES" свежда изхода само до числото 3, което улавяме с :out и подрязваме.

  3. Накрая прибирането се прави обратно в Raku с unlink — без нужда от обвивка. Изтриването на файл е обикновена операция на файловата система, така че няма причина да се стартира още един процес за нея.

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

Подайте променлива на дъщерен процес   |   Изключения