El modo autoflush
es controlado mediante la variable $| (véase perlvar).
La variable sólo afecta al fichero de salida
estándar actualmente seleccionado.
Por tanto, para poner un fichero en modo
autoflush se hace primero un select,
se pone la variable $| a 1 y se vuelve a hacer un
select del fichero anterior. La función select
retorna el fichero actualmente seleccionado.
Por ejemplo, para poner en modo autoflush el fichero
F hacemos:
my $previousF = select(F); $| = 1; select($previousF);
Que normalmente se resume en la siguiente frase hecha (idiom):
select((select F, $| = 1)[0]);
El método autoflush de un objeto IO::Handle permite cambiar su estado de flush :
use IO::Handle; $F = new IO::Handle; $F->autoflush(1);
Las funciones sysread y syswrite posibilitan la entrada/salida sin el uso de buffers intermedios. Por ello su uso - cuando de procesos se trata - es mas conveniente que el de las correspondientes funciones de e/s con buffers.
El formato de sysread es:
sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
sysread FILEHANDLE,SCALAR,LENGTH
Se intenta una lectura del fichero
FILEHANDLE de LENGTH bytes para escribirlos
en el buffer SCALAR. No es buena idea mezclar
la función con sus colegas con buffer:
print, write, seek, tell y eof.
Retorna el número de bytes que se pudieron leer.
El buffer SCALAR crece o se contrae para contener exactamente
hasta el último byte leído.
Si se especifica, el OFFSET
dice en que lugar de SCALAR se colocan los datos leídos.
Para saber que hemos llegado al final de la lectura compruebe
que el número de bytes leídos es cero.
El formato de syswrite es:
syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
syswrite FILEHANDLE,SCALAR,LENGTH
syswrite FILEHANDLE,SCALAR
Intenta escribir LENGTH bytes de SCALAR en
FILEHANDLE saltándose los buffers de E/S.
Si no se especifica LENGTH se escribe todo
SCALAR.
