设置要在Perl IO :: File中读取的行

时间:2012-06-26 17:18:04

标签: perl file-io

如何根据行号(而非字节)更改文件句柄中指针的位置?

我想将第一行设置为开始读取文件。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

设置文件指针不是自己的目的。如果您想阅读某一行,请使用Tie::File

use Tie::File qw();
tie my @file, 'Tie::File', 'thefilename' or die $!;
print $file[2]  # 3rd line

答案 1 :(得分:4)

使用tellseek来读取和写入文件中每行的位置。这是一个可能的解决方案,需要您传递整个文件,但不要求您立即将整个文件加载到内存中:

# make a pass through the whole file to get the position of each line
my @pos = (0);   # first line begins at byte 0
open my $fh, '<', $the_file;
while (<$fh>) {
    push @pos, tell($fh);
}
# don't close($fh)


# now use  seek  to move to the position you want
$line5 = do { seek $fh,$pos[4],0; <$fh> };

$second_to_last_line = do { seek $fh,$pos[-3],0; <$fh> };