Курс по 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.