Estoy tratando de leer datos sin buffer de una tubería en Perl. Por ejemplo en el siguiente programa:Leer datos sin búfer de la tubería en Perl
open FILE,"-|","iostat -dx 10 5";
$old=select FILE;
$|=1;
select $old;
$|=1;
foreach $i (<FILE>) {
print "GOT: $i\n";
}
iostat escupe datos cada 10 segundos (cinco veces). Es de esperar que este programa haga lo mismo. Sin embargo, en su lugar, parece colgar durante 50 segundos (es decir, 10x5), después de lo cual escupe todos los datos.
¿Cómo puedo obtener la devolución de los datos que estén disponibles (sin amortiguar), sin esperar todo el camino para EOF?
P.S. He visto numerosas referencias a esto en Windows, estoy haciendo esto bajo Linux.
Debería utilizar 'while' not a' foreach'. Y su almacenamiento en búfer de salida no es importante, dado que es un identificador de entrada, no un identificador de salida. – tchrist
¿Cuál es la diferencia cuando se usa while y foreach? – Jean
@alertjean: en 'foreach my $ i () {...}', la lectura del archivo se realiza en contexto de lista, es decir, se lee el archivo completo antes de que las líneas se procesen en el bucle 'foreach'. En 'while (mi $ i = ) {...}', la lectura se realiza en contexto escalar, es decir, cada línea se lee y luego se procesa en el bloque while, antes de leer la siguiente línea. –