open IN, '; print length $offsets; 4000008 sub readline_n{ my( $fh, $line) = @_; seek $fh, unpack( 'V', substr( $offsets, --$line*4, 4 )), 0; scalar <$fh> } print readline_n( \*IN, 500000 ); 500000