http://www.perlmonks.org?node_id=11125083


in reply to Memory efficient way to deal with really large arrays?

Is there any way you can tell perl a scalar is to be a int only of a certain size?

See PDL. I have no experience with this software other than knowing of its existence, but I think it might be able to do this trick.

The other idea I have is [to use] a gigantic scalar, and then pack/unpack the values in/out of the scalar ...

Take a look at BrowserUk's ultimate solution for the problem posed here. substr is used rather than pack/unpack.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^2: Memory efficient way to deal with really large arrays?
by salva (Canon) on Dec 13, 2020 at 10:08 UTC
    Indeed. PDL is probably the most powerful and efficient module both in terms of memory usage and speed, but it has its learning curve.

    On the other hand, there are several modules on CPAN allowing one to access packed strings as regular arrays as for instance Packed::Array, Tie::Array::PackedC or my own Tie::Array::Packed.

    Those modules are memory efficient, but relatively slow due to the tie interface overhead. Well, actually, for instance, Tie::Array::Packed which is written in fast XS, would probably be on par with using perl builtins (i.e. substr, pack, unpack, etc.) to access a packed string. Probably it depends of the specific operations being performed.

Re^2: Memory efficient way to deal with really large arrays?
by perlfan (Vicar) on Dec 14, 2020 at 19:35 UTC
    PDL is what I'd recommend, too. Note that it is a complete framework and leverages custom "array" and other data type containers that can be used in perl code. But, yay TIMTOWTDI!