当我发出 Perl 脚本时,一些标准输入,例如
$ awk '{print $1"\t"$2}' foo.txt | myScript.pl
我有一个包含错误的脚本。它读取标准输入的第一行,从第一行获取一些内容,然后在后续读取时仅解析标准输入的第 2 行到第 n 行:
open (FH, "< $input") or die $?;
my $firstLine = <FH>; // reads first line
...
while (my $line = <FH>) {
// reads lines 2 through n
}
close (FH);
所以我seek
在这个脚本中添加了一条语句来尝试将文件句柄重置为文件的开头:
use Fcntl qw(:seek);
...
open (FH, "< $input") or die $?;
my $firstLine = <FH>; // reads first line
seek (FH, 0, SEEK_SET) or die "error: could not reset file handle\n"; // should reset file handle
...
while (my $line = <FH>) {
// reads lines 1 through n (in theory)
}
close (FH);
添加此seek
语句适用于文件输入,但不适用于标准输入。脚本因错误而崩溃:
error: could not reset file handle
如何在脚本开始时正确读取标准输入的第一行,重置文件句柄,然后读取标准输入的第 1 行到第 n 行?
我想我可以编写一个特殊情况来存储和处理循环之前的第一行while
,但我希望有一个更简洁的解决方案来解决这个问题,让我能够同时处理标准输入和文件输入。