Символ "\ r" является возвратом каретки - он возвращает курсор назад к началу строки. Таким образом, все, что вы распечатываете, переписывает текст предыдущего уведомления о прогрессе.

рограмма (которая написана на Perl, хотя я не думаю, что этот вопрос специфичен для Perl) выводит сообщения о состоянии в одной точке программы видаProgress: x/yy гдеx а такжеyy число, как:Progress: 4/38.

Я хотел бы «перезаписать» предыдущий вывод при печати нового сообщения о состоянии, чтобы я не заполнял экран сообщениями о состоянии. Пока я пробовал это:

my $progressString = "Progress\t$counter / " . $total . "\n";
print $progressString;
#do lots of processing, update $counter
my $i = 0;
while ($i < length($progressString)) {
    print "\b";
    ++$i;
}

Символ возврата не будет печататься, если я добавлю новую строку в$progressString, Однако, если я опускаю символ новой строки, буфер вывода никогда не очищается и ничего не печатается.

Какое хорошее решение для этого?

Ответы на вопрос(5)

Ваш ответ на вопрос