The cache data is just @$self being a line number ⇒ byte offset mapping, for every line. It would be nice if it could have an upper limit to the amount of RAM/disk that it consumes, by increasing the gap between cache entries, whenever the upper limit is hit again. (and also have an easy external interface that allows it to optionally persist its data to disk, especially because doing a binary search on a sorted disk file is pretty efficient)
It could probably have an external interface very similar to Tie::File::Indexed, although push/pop/shift/unshift/splice would definitely not be allowed.