我有一个文件句柄来从文件或管道中读取数据。首先,我从文件句柄中读取一行。然后,我需要执行while
循环,同时考虑先前读取的行。我认为seek
function管道存在问题。
所以我的伪代码是
local $line = <INPUT>;
seek(INPUT, -length($line), 1);
# if block
while (<INPUT>) {
}
也许,有这样的解决方案吗?
while ($line, <INPUT>) {
}
答案 0 :(得分:3)
向后看:
my $prev;
while (defined( my $line = <> )) {
... Use $prev and $line. $prev might not be defined. ...
$prev = $line;
}
展望未来:
my $line = <>;
while (defined($line)) {
my $next = <>;
... Use $line and $next. $next might not be defined. ...
$line = $next;
}
成对:
if (defined( my $line1 = <> )) {
while (defined( my $line2 = <> )) {
... Use $line1 and $line2. Both will be defined. ...
$line1 = $line2;
}
}
答案 1 :(得分:1)
记住变量中的第一行。在循环结束时从文件句柄中读取下一行:
#!/usr/bin/perl
use warnings;
use strict;
open my $FH, '-|', 'echo 3 ; seq 1 10' or die $!;
if (defined( my $first = <$FH> )) {
my $line = $first;
while () {
chomp $line;
print "$line:$first";
last if eof $FH;
$line = <$FH>;
}
}
答案 2 :(得分:0)
很大程度上取决于你为什么要这样做。最简单的方法就是编写一个while循环并在第一次执行时保存该行。可能不需要读取第一行,然后将其输入读取循环
这样的事可能
my $first_line;
while ( <> ) {
$first_line //= $_;
# Process $_
}