У меня есть следующий код: PerlPerl печати буферизация флеш
STDOUT->autoflush(1);
foreach(...)
{
...
foreach(...)
{
print("Processing $folder");
$|=1;
process($folder);
}
...
}
но оператор печати работает только в первой итерации цикла и ничего после этого не печатать. Любая идея почему?
EDIT: Я нашел причину и добавил ее в ответ. Решение было:
я добавил следующую строку внутри цикла , и она работала:
выберите STDOUT;
Я думаю, что код в процессе() функции должен был модифицировать выходной буфер по умолчанию . Это был код, написанный кем-то другим!
Я не уверен, если это проблема с Perl, который позволяет этому или в разработчик, который не изменить его обратно по умолчанию.
Окончательный код выглядит следующим образом:
foreach(...) { ... foreach(...) { select STDOUT; print("Processing $folder"); $|=1; process($folder); } ... }
Спасибо всем ...
Вы уверены, что есть больше чем одна итерация? – innaM
Да, есть более чем одна итерация. Я попытался добавить предупреждение, и он печатался несколько раз. – Manoj
нашел проблему. См. Мой ответ ниже. – Manoj