3 votes

Comment rouvrir STDIN <> en perl ?

Comment ouvrir STDIN pour la deuxième fois ?

Supposons que je dispose des données suivantes

John Smith  25  O   ATG 180
Peter Jackson   40  AB  GGTA    173
Carl Anderson   32  A   GGT 172

Et j'ai ce code

while( my $line = <>)  {
    print $line;
}
while( my $line = <>)  {
    print $line;
}

Je veux qu'il s'imprime

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

9voto

Tom Points 1079

Vous ne pouvez pas, vous avez vidé le cours d'eau. Si vous voulez le réutiliser, mettez les lignes dans un tableau.

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

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

Ou encore, écrire dans un fichier et obtenir un filehandle sur le fichier.

5voto

salva Points 5357

Si STDIN est attaché à un fichier, vous pouvez alors seek(STDIN, 0, 0) mais en général, vous ne pouvez pas faire ce que vous demandez.

0voto

Pete Points 166

Vous pouvez toujours récupérer le nom du fichier au lieu d'utiliser STDIN.

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

S'il s'agit d'une liste de fichiers, vous pouvez les parcourir en boucle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X