如何第二次打开STDIN?
假设我有这个数据
John Smith 25 O ATG 180
Peter Jackson 40 AB GGTA 173
Carl Anderson 32 A GGT 172
我有这段代码
while( my $line = <>) {
print $line;
}
while( my $line = <>) {
print $line;
}
我希望它打印
John Smith 25 O ATG 180
Peter Jackson 40 AB GGTA 173
Carl Anderson 32 A GGT 172
John Smith 25 O ATG 180
Peter Jackson 40 AB GGTA 173
Carl Anderson 32 A GGT 172
答案 0 :(得分:9)
你不能,你已经清空了流。如果要再次使用它,请将这些行放在一个数组中。
my @lines;
while( my $line = <>) {
print $line;
push @lines, line;
}
foreach my $line (@lines) {
print $line;
}
或者,写入文件并在文件上获取文件句柄。
答案 1 :(得分:5)
如果STDIN附加到文件,那么您可以seek(STDIN, 0, 0)
,但一般情况下,您无法按照要求执行操作。
答案 2 :(得分:0)
您始终可以获取文件名,而不使用STDIN。
$fn = shift;
open(MyFile,"< $fn") || die "cant open $fn $!";
while(MyFile) { } # first time thru
seek MyFile,0,0
while(MyFile) { } # second time thru
如果这是文件列表,则可以循环浏览它们。