从/ dev / stdin读取时为什么不寻找工作?

时间:2014-11-03 18:37:51

标签: perl

我正在尝试使用seek使用以下代码“回放”到文件的开头:

#! /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

为什么?

1 个答案:

答案 0 :(得分:3)

管道不可寻找,

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

给出Can't seek('ARGV', '0', '0'): Illegal seek at -e line 1,但是在文件的情况下它按预期工作。