Я считаю, что проблема в буферизации.Вы можете сделать дескриптор файла hot (небуферизованный) следующим образом:
select PIPE;
$| = 1; # the pipe is just a coincidence. that's the variable's name
select STDOUT; # select it back
Это должно отключить буферизацию для PIPE.Я читал о чем-то подобном в Learning Perl, 5TH .Смотрите также это .Вы, вероятно, также должны быть уверены, что буферизация не произойдет где-то еще.
РЕДАКТИРОВАТЬ: ОП опубликовал сообщение о замене для на , тогда как решило проблему
Я думаю, что теперь понимаю.while
получает каждую строку и запускает цикл, тогда как for
действует как foreach
, а first получает все строки (требуется контекст списка), а затем зацикливает строки.