Курс Raku / Об’єкти, введення-виведення та винятки / Введення та виведення / Стандартні потоки / Вправи / Виведення та помилки

Розв’язання: Виведення та помилки

Ось один із можливих варіантів розв’язання задачі.

Код

my @data = 3, 5, 7;

my $sum = 0;
for @data -> $n {
    $sum += $n;
    $*ERR.say("running total: $sum");
}

$*OUT.say($sum);

🦋 Вихідний код можна знайти у файлі output-and-error.raku.

Вивід

На екрані з’являються обидва потоки — накопичені суми, а потім остаточний результат:

running total: 3
running total: 8
running total: 15
15

Якщо відкинути стандартний потік помилок, лишається тільки справжній вивід:

$ raku output-and-error.raku 2>/dev/null
15

Коментарі

  1. $*OUT та $*ERR є дескрипторами стандартного виводу та стандартного потоку помилок. Кожен має власний метод say.

  2. Кожен прохід циклу додає наступне число й пише накопичену суму до $*ERR; до $*OUT іде лише остаточна сума. На екрані поступ і результат виглядають однаково, але мандрують різними потоками, — саме тому перенаправлення стандартного потоку помилок через 2>/dev/null лишає позаду тільки остаточні 15.

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

Виведення та помилки   |   Попередження через note