使用Perl从文件中读取一行而不使行计数器增加

4
我希望能够在不增加行计数器的情况下读取“下一行”,以便下次发出读取命令时可以读取相同的行。
例如:
这是第一行 这是第二行 这是第三行
我希望能够知道第二行写着“这是第二行”,但不会增加计数器,以便我的程序:
print <>;
print unknown_read_command;
print <>;

将在屏幕上打印:

这是第一行
这是第二行
这是第三行

更加通用的说,我如何改变并移动指针到任意想要的方向和数量的行?


1
你想要"窥视"而不是读取下一行。http://www.perlmonks.org/index.pl?node_id=181068(我实际上不懂perl,但那是这个术语)。根据该链接,这可能并不容易或优雅。 - Andrew M
2个回答

7

您可以使用tell获取文件句柄的文件位置,并使用seek设置它:

my $pos = tell $fh;
# ...
seek $fh, $pos, 0 or die "Couldn't seek to $pos: $!\n";

4
并非所有输入源都可寻址。 - reinierpost

3

如果您按行阅读,另一种方法是使用Tie::File

#!/usr/bin/perl 

use strict;
use warnings;
use Tie::File;

my $fn = "foo.bar";

tie my @myFileLines, 'Tie::File', $fn or die "$?";

print STDOUT $myFileLines[0];
print STDOUT $myFileLines[1];
print STDOUT $myFileLines[1]; # print second line twice

untie @myFileLines;

使用文件寻址方法更通用,你需要自己寻找换行符,并且在 Windows 系统中还有一个私有的换行符,使得操作变得更加复杂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接