Как я могу открыть STDIN <> в Perl? - PullRequest
3 голосов
/ 08 марта 2012

Как я могу открыть 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 ]

9 голосов
/ 08 марта 2012

Ты не можешь, ты опустошил поток.Если вы хотите использовать его снова, поместите строки в массив.

my @lines;
while( my $line = <>)  {
    print $line;
    push @lines, line;
}

foreach my $line (@lines)  {
    print $line;
}

Или запишите файл и получите дескриптор файла для файла.

5 голосов
/ 08 марта 2012

Если STDIN прикреплен к файлу, вы можете seek(STDIN, 0, 0), но в целом вы не можете делать то, что просите.

0 голосов
/ 29 октября 2018

Вы всегда можете получить имя файла вместо STDIN.

$fn = shift;
open(MyFile,"< $fn") || die "cant open $fn $!";
while(MyFile) { } # first time thru
seek MyFile,0,0
while(MyFile) { } # second time thru

Если это список файлов, вы можете просмотреть их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...