in reply to Index or iterate - your choice

ELF structural tables tend to be relatively small, so simply returning a list (as other monks have suggested and you seem to have chosen) is probably the best solution. Further, the records themselves (excluding the actual contents) are of very limited and finite size.

I would suggest "splitting the difference" and returning a list of objects that describe the table entries fully and carry internal file references for the actual data. Producing a tied filehandle "on demand" that reads the extent for the actual data is not difficult; you need only remember the position and length and enforce the artificial EOF.

Replies are listed 'Best First'.
Re^2: Index or iterate - your choice
by GrandFather (Saint) on Jan 28, 2021 at 02:47 UTC

    As mentioned above the various replies have stimulated me into returning lists for segments and sections which, as you point out are small in number and small in size. However I'm going to provide an iterator for returning the contents of segments and sections. Parameters to the iterator generator will let me set the maximum size of blobs returned and allow specifying selected portions of the blocks to be returned. That fits nicely with common use patterns where fixed size blocks are consumed by processes such as flash programmers and debuggers. That also helps with code that might write files for consumption by flash programmers and debuggers etc.

    Methods that return lists or iterators can both benefit from providing filtering so I'll roll that in as an option too. Any other kitchen sinks I should add?

    Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

      I would still advocate using a tied filehandle for reading contents, since that is effectively a built-in iterator interface for byte streams.