Io :: Instu.

IO :: INSITU è un modulo Perl per evitare i file di clobberaggio aperti sia per ingresso che uscita.
Scarica ora

Io :: Instu. Classifica e riepilogo

Annuncio pubblicitario

  • Rating:
  • Licenza:
  • Perl Artistic License
  • Prezzo:
  • FREE
  • Nome editore:
  • Damian Conway
  • Sito web dell'editore:
  • http://search.cpan.org/~dconway/

Io :: Instu. Tag


Io :: Instu. Descrizione

IO :: Instu è un modulo perl per evitare i file di clobberaggio aperti sia per l'input che per l'output. IO :: INSITU è un modulo Perl per evitare i file di clobberazione aperti sia per l'ingresso che per l'output.synopsis, utilizzare IO: Insittu; my ($ in, $ out) = open_rw ($ infile_name, $ outfile_name); per la mia linea $ () {$ LINE = ~ s / foo / bar / g; Stampa {$ out} $ LINE; } Quando gli utenti desiderano eseguire l'elaborazione in-situ su un file, spesso lo specificano come il file di input e output:> myApp -i sample_data -o sample_data -op = normalizebut, se i flag -i e -o vengono elaborati in modo indipendente , il programma di solito aprirà il file per l'input, aprilo nuovamente per l'output (a quel punto il file verrà troncato a zero lunghezza), quindi tentare di leggere nella prima riga del file ormai vuoto: # Aprire entrambi i filehandles ... usa fatale qw (aperto); Apri il mio $ SRC, '', $ Destination_file; # Lettura, processo e dati di output, line-by-line ... while (my $ line = <$ src>) {stampa {$ dest} trasformata ($ riga); } Non solo questo non esegue la trasformazione richiesta sul file, distrugge anche i dati originali. Fortunatamente, questo problema è estremamente facile da evitare: assicurati di scollegare il file di output prima di aprirlo: # Apri entrambi i filehandles ... usa Fatal QW (Apri); Apri il mio $ SRC, '', $ Destination_file; # Lettura, processo e dati di output, line-by-line ... while (my $ line =) {stampa {$ Dest} Trasforma ($ LINE); } Se i file di input e output sono diversi, scollegando il file di output semplicemente rimuove un file che stava riscritto comunque. Quindi il secondo aperto ricree semplicemente il file di output, pronto per la scrittura. Se i due file dei file sono effettivamente consultati a un singolo file in-situ, scollegando il nome file di uscita rimuove quel nome file dalla sua directory, ma non rimuove il file stesso dal filesystem . Il file è già aperto attraverso il fileHandle in $ ingresso, quindi il filesystem preserverà il file non collegato fino a quando non è chiuso il file di ingresso. Il secondo aperto crea quindi una nuova versione del file in-situ, pronto per la scrittura. L'unica limitazione di questa tecnica è che cambia l'inodo di qualsiasi file in-situ. Questo può essere un problema se il file ha qualche alias hard-linked, o se altre applicazioni stanno identificando il file con il proprio numero di inode. Se è possibile una delle situazioni possibili, è possibile preservare l'inodo del file in situ utilizzando la subroutine Open_RW () esportata da questo modulo: # Aprire entrambi i fileHandles ... Usa IO :: Insittu; My ($ src, $ dest) = open_rw ($ source_file, $ Destination_file); # Lettura, processo e dati di output, line-by-line ... while (my $ line =) {stampa {$ Dest} Trasforma ($ LINE); } Requisiti: · Perl.


Io :: Instu. Software correlato