Какой самый удобный способ извлечь указанный диапазон байтов файла на диске в переменную?
seek до начала диапазона, read желаемое количество байтов (или sysseek / sysread - см. Комментарий nohat).
seek
read
sysseek
sysread
open $fh, '<', $filename; seek $fh, $startByte, 0; $numRead = read $fh, $buffer, $endByte - $startByte; # + 1 &do_something_with($buffer);
Иногда мне нравится использовать File :: Map , который лениво загружает файл в скаляр. Это превращает его в строковые операции вместо операций с дескрипторами файлов:
use File::Map 'map_file'; map_file my $map, $filename; my $range = substr( $map, $start, $length );