indietro

  • sysseek FILEHANDLE,POSIZIONE,DA_DOVE

    Imposta la posizione di sistema del FILEHANDLE in byte, usando la chiamata di sistema lseek(2). FILEHANDLE può essere un'espressione il cui valore fornisce il nome del filehandle. I valori per DA_DOVE sono 0 per impostare la nuova posizione a POSIZIONE, 1 per impostarla alla posizione corrente più POSIZIONE e 2 per impostarla ad EOF più POSIZIONE (tipicamente negativa).

    Notate l'in byte: anche se il filehandle è stato impostato per operare su caratteri (per esempio usando lo strato di I/O :utf8), tell() restituirà scostamenti di byte, non scostamenti di caratteri (visto che implementare questo renderebbe sysseek() molto lenta).

    sysseek() aggira il normale IO con buffer, dunque unire questo con i vari read (oltre a sysread, per esempio <> oppure read()), print, write, seek, tell o eof, potrebbe causare confusione.

    Per DA_DOVE, si potrebbe anche usare le costanti SEEK_SET, SEEK_CUR e SEEK_END (inizio del file, posizione corrente, fine del file) dal modulo Fcntl. L'uso delle costanti è anche più portabile che fare affidamento su 0, 1 e 2. Per esempio, per definire una funzione "systell":

    	use Fnctl 'SEEK_CUR';
    	sub systell { sysseek($_[0], 0, SEEK_CUR) }

    Restituisce la nuova posizione oppure il valore indefinito in caso di insuccesso. Un valore di posizione pari a zero viene restituito sotto forma della stringa "0 ma vero"; dunque sysseek restituisce vero in caso di successo e falso in caso di insuccesso, tuttavia la nuova posizione può ancora essere determinata facilmente.