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
.