How can I use __DATA__
twice?
#!/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
To use the DATA
filehandle twice you need to rewind it. The tricky bit is that if you do seek(DATA, 0, 0)
, it'll be positioned to the first source line, not the line after __DATA__
. Therefore you need to save the position first:
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>);
See also:
tell
seek
You can use the Data::Handle module to do the tell()ing
and seek()
ing for you behind the scenes. (Though I believe if you have perl 5.10 or later you can dup the DATA
file handle instead of sharing the original DATA
file handle and seeking back and forth in it.)
In all honesty, the easiest solution is to read DATA once and stash it in an array or variable.
my @data;
while(<DATA>){
push @data, $_;
}
精彩评论