我怎样才能使用__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
我怎样才能使用__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
要使用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>);
也可以看看:
您可以使用Data::Handle模块在幕后为您执行tell()ing
and ing。seek()
(虽然我相信如果你有 perl 5.10 或更高版本,你可以复制文件句柄,DATA
而不是共享原始DATA
文件句柄并在其中来回查找。)
老实说,最简单的解决方案是读取一次 DATA 并将其存储在数组或变量中。
my @data;
while(<DATA>){
push @data, $_;
}