perl filehandle

perl - ¿Cómo puedo usar__DATA__ dos veces?



filehandle (2)

Para usar el archivo DATA maneja dos veces, debes rebobinarlo. El truco es que si seek(DATA, 0, 0) , se __DATA__ en la primera línea fuente, no en la línea después de __DATA__ . Por lo tanto, primero debe guardar la posición:

my $data_start = tell DATA; # save the position print while (<DATA>); seek DATA, $data_start, 0; # reposition the filehandle right past __DATA__ print while (<DATA>);

Ver también:

¿Cómo puedo usar __DATA__ dos veces?

#!/usr/local/bin/perl use warnings; use 5.012; while ( <DATA> ) { print; } while ( <DATA> ) { chomp if $. == 1; print scalar reverse; print "/n" if eof; }

__DATA__ one two three four five six


Puede usar el módulo Data::Handle para hacer el tell()ing y seek() ing detrás de las escenas. (Aunque creo que si tiene Perl 5.10 o posterior, puede dup el identificador del archivo DATA lugar de compartir el identificador original del archivo DATA y buscarlo de ida y vuelta en él).