Как я могу открыть 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 ответа
Вы не можете, вы опустошили поток. Если вы хотите использовать его снова, поместите строки в массив.
my @lines;
while( my $line = <>) {
print $line;
push @lines, line;
}
foreach my $line (@lines) {
print $line;
}
Или напишите в файл и получите дескриптор файла.
Если к файлу прикреплен STDIN, вы можете seek(STDIN, 0, 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
Если это список файлов, вы можете их просмотреть.
Похожие вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.