You have to read a binary record from the middle of a large file but don’t want to read a record at a time to get there.
Once you know the record’s size, multiply it by the record number to get the byte address, and then seek to that byte address and read the record:
$ADDRESS = $RECSIZE * $RECNO; seek(FH, $ADDRESS, 0) or die "seek:$!"; read(FH, $BUFFER, $RECSIZE);
The Solution assumes the first record has a
of 0. If you’re counting from one, use:
$ADDRESS = $RECSIZE * ($RECNO-1);
This won’t work on a text file unless all lines are the same length. This is rarely the case.
seek function in
(1) and in Chapter 3 of Programming Perl
; Section 8.13