indietro

  • sysread FILEHANDLE,SCALARE,LUNGHEZZA,SCOSTAMENTO
  • sysread FILEHANDLE,SCALARE,LUNGHEZZA

    Cerca di leggere un numero di byte di dati pari a LUNGHEZZA nella variabile SCALARE dal FILEHANDLE specificato, utilizzando la chiamata di funzione read(2). Essa aggira l'IO con buffer, dunque mescolarla con altri tipi di read, print, write, seek, tell o eof potrebbe causare confusione visto che il perlio o lo stdio di solito utilizzano un buffer per i dati. Restituisce il numero di caratteri effettivamente letti, 0 alla fine del file, oppure undef se c'è stato un errore (in quest'ultimo caso viene anche impostato $!). SCALARE verrà aumentato o diminuito in maniera che l'ultimo byte effettivamente letto sia l'ultimo byte dello scalare dopo la lettura.

    Uno SCOSTAMENTO può essere specificato per posizionare i dati letti da qualche parte della stringa che non sia l'inizio. Uno SCOSTAMENTO negativo specifica il posizionamento a quel numero di caratteri, contando a ritroso a partire dalla fine della stringa. Uno SCOSTAMENTO positivo maggiore della lunghezza dello SCALARE ha come risultato il riempimento della stringa alla dimensione richiesta con dei byte "\0" prima che il risultato della lettura sia avvenuto.

    Non c'è una funzione syseof(), il che è ok, visto che comunque eof() non funziona molto bene sui file di device (come ttys). Usate sysread() e controllate che il valore restituito sia pari a 0 per decidere se si ha concluso.

    Va notato che se il filehandle è stato marcato come :utf8, verranno scritti caratteri Unicode invece di byte (la LUNGHEZZA, lo SCOSTAMENTO e il valore restituito da sysread() sono in caratteri Unicode). Lo strato :encoding(...) introduce implicitamente lo strato :utf8. Consultate binmode, open e la direttiva di open, open.