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

时间:2010-11-15 13:23:51

标签: perl

我希望能够在不增加行计数器的情况下读取“下一行”,以​​便下次读取命令时它将读取相同的行。

示例:

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

我希望能够知道第二行说“这是第二行”,但没有推进我的计数器以便我的程序:

print <>;
print unknown_read_command;
print <>;

将在屏幕上打印:

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

更一般地说,如何在任何方向和我想要的任何数量上更改和移动指向线的指针?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分: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会使用专有换行符。