如何重新打开STDIN<>在perl?

时间:2012-03-08 12:15:36

标签: perl stdin loops

如何第二次打开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

3 个答案:

答案 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

如果这是文件列表,则可以循环浏览它们。