2014-11-03 2 views
2

Я пытаюсь использовать seek для «перемотать» на начало файла, используя следующий код:Почему не следует искать работу при чтении с/dev/stdin?

#! /usr/bin/perl 

use strict; 
use warnings; 

my $infile = $ARGV[0]; 
open (FH, "<$infile"); 

while(<FH>) { 
    chomp; 
    print $_,"\n"; 
} 

print "one time","\n"; 

seek FH, 0, 0; 

while(<FH>) { 
    chomp; 
    print $_,"\n"; 
} 

Мой входной файл выглядит следующим образом:

A A A A A A A 
B B B B B B B 

Я бегу свою программу с следующая команда:

cat file | perl script.pl /dev/stdin 

Но вместо того, чтобы мой ожидаемый результат:

A A A A A A A 
B B B B B B B 
one time 
A A A A A A A 
B B B B B B B 

я получаю:

A A A A A A A 
B B B B B B B 
one time 

Почему?

+0

@toolic Я сделал, но так же, как и предыдущий; ( – EpiMan

+0

в соответствии с http://stackoverflow.com/questions/12043592/perl-re-reading-from-already-read-filehandle – EpiMan

+0

Я комментирую как локальные :: lib и использовать Fcntl; out, но странно, что я не могу получить ожидаемый результат !!! – EpiMan

ответ

3

Трубы не искать-состоянии,

seq 5 | perl -Mautodie -pe 'seek ARGV,0,0 if eof' 

дает Can't seek('ARGV', '0', '0'): Illegal seek at -e line 1, но в случае файла он работает, как ожидалось.

Смежные вопросы