Функция Perl Print не работает должным образом при использовании Sleep () - PullRequest
5 голосов
/ 17 апреля 2011

У меня есть следующий код для печати "."каждую секунду для имитации индикатора выполнения.

$num = 15;
while($num--){
    sleep(1);
    print ".";
}

Проблема, с которой я сейчас сталкиваюсь, - это "."символ не печатается после каждой петли.Вместо этого все 15 "."печатаются сразу после выхода из цикла.Однако, если я печатаю ". \ N", он работает нормально.Но "."будет печататься на новой строке каждый раз, что не то, что я хочу.

Это кажется довольно странным и не может понять, почему.Может ли кто-нибудь помочь?Спасибо.

С уважением, Аллен

Ответы [ 3 ]

21 голосов
/ 17 апреля 2011

Вероятно, это связано с буферизацией ввода / вывода.Попробуйте отключить буферизацию (автозапуск):

$| = 1;

перед циклом.

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

4 голосов
/ 17 апреля 2011

Вам нужно отключить буферизацию на STDOUT.См $| в perlfaq

1 голос
/ 17 апреля 2011

Стандартный поток вывода обычно буферизуется. Попробуйте очистить поток вывода после каждого оператора печати. См. Perl Cookbook, §7.13 для подробного объяснения и решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...