Как я могу сразу распечатать текст, не ожидая новой строки в Perl?

Я имею в вычислительном отношении дорогую задачу в жемчуге и хотел бы сообщить пользователю, что вычисление продолжается путем распечатывания периода после того, как каждая часть вычисления завершается. К сожалению, пока я не печатаю "\n", ни один из моих периодов не печатается. Как я могу обратиться к этому?

14
задан brian d foy 17 March 2010 в 03:13
поделиться

4 ответа

Вам необходимо установить автоматическую промывку для STDOUT. Пример:

use IO::Handle;
STDOUT->autoflush(1);
foreach (1..20) {
  print '.';
  sleep(1);
}
17
ответ дан 1 December 2019 в 09:01
поделиться

См. FAQ Как очистить / разблокировать дескриптор выходного файла? Почему я должен это делать? и примечание:

Помимо специальной переменной $ | , вы можете использовать binmode , чтобы присвоить дескриптору файла уровень : unix , который не буферизован. ...

Для решения общей проблемы вы можете посмотреть Time :: Progress :

% b

% B

индикатор выполнения, который выглядит так:

 ############## ...................... 
 
2
ответ дан 1 December 2019 в 09:01
поделиться

установите $ | = 1 перед тем, как начать печать. Например.

perl -e ' $|=1; foreach (1..10) { print "$_ "; sleep(1); }'
7
ответ дан 1 December 2019 в 09:01
поделиться

Отличная статья, которую вам стоит прочитать: Страдаете от буферизации?

4
ответ дан 1 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: