如何使用__DATA__
两次?
#!/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
答案 0 :(得分:46)
要使用DATA
文件句柄两次,您需要回放它。棘手的是,如果你做seek(DATA, 0, 0)
,它将被定位到第一个源行,而不是__DATA__
之后的行。因此,您需要先保存位置:
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>);
另见:
答案 1 :(得分:7)
您可以使用Data::Handle模块在幕后为您执行tell()ing
和seek()
。 (虽然我相信如果你有perl 5.10或更高版本,你可以dup DATA
文件句柄而不是共享原始DATA
文件句柄并在其中来回搜索。)
答案 2 :(得分:0)
老实说,最简单的解决方案是一次读取DATA并将其存储在数组或变量中。
my @data;
while(<DATA>){
push @data, $_;
}