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

Решение: Вывод и ошибки

Вот один из возможных вариантов решения задачи.

Код

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