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).