行番号(バイトではなく)の観点からファイルハンドル内のポインタの位置を変更するにはどうすればよいですか?
最初の行をファイルの読み取り開始に設定したいと思います。これを行うための適切な方法は何ですか?
ファイルポインタの設定は、それ自体の目的ではありません。特定の行を読みたい場合は、Tie::Fileを使用します。
use Tie::File qw();
tie my @file, 'Tie::File', 'thefilename' or die $!;
print $file[2] # 3rd line
tell
およびを使用seek
して、ファイルの各行の位置を読み書きします。ファイル全体をパススルーする必要があるが、ファイル全体を一度にメモリにロードする必要がない、考えられる解決策は次のとおりです。
# 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> };