Чтение небуферизованных данных из канала в Perl

Я пытаюсь прочитать небуферизованные данные из канала в Perl. Например, в программе ниже:

open FILE,"-|","iostat -dx 10 5";
$old=select FILE;
$|=1;
select $old;
$|=1;

foreach $i (<FILE>) {
  print "GOT: $i\n";
}

iostat выдает данные каждые 10 секунд (пять раз). Вы ожидаете, что эта программа сделает то же самое. Однако вместо этого он зависает на 50 секунд (т. е. 10x5), после чего выдает вседанные.

Как я могу заставить возвращать любые доступные данные (небуферизованным способом), не дожидаясь завершения операции завершения записи?

П.С. Я видел многочисленные ссылки на это под Windows — я делаю это под Linux.

7
задан Brad 9 March 2012 в 15:29
поделиться