Курс языка программирования 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Комментарии
$*OUTи$*ERR— это дескрипторы стандартного вывода и стандартного потока ошибок. У каждого есть собственный методsay.На каждом проходе цикла прибавляется очередное число, и накопленная сумма пишется в
$*ERR; в$*OUTуходит только итоговая сумма. На экране ход работы и результат выглядят одинаково, но идут они по разным потокам — поэтому, если увести стандартный поток ошибок через2>/dev/null, останется только итоговое15.