in reply to Memory efficient design

As long as you don't need to modify the contents of the data you loaded from the file, you should give File::Map a try. It memory-maps the file into your process and into a Perl scalar. Best of all, it doesn't even add that memory to Perl (if read-only) because Linux can just memory-map the filesystem cache into your process. When you unmap it, it definitely gets released back to the OS. (which may or may not choose evict it from the filesystem cache)

One catch, that module operates on a plain scalar, and if you do ANYTHING with that scalar other than use it directly or take a reference to it, Perl is likely to make a copy of it, defeating your optimization. I recommend making a reference to a scalar, then mapping the scalar it references, then pass around the reference, possibly as an object.

Example

package OpenGL::Sandbox::MMap; use strict; use warnings; use File::Map 'map_file'; # ABSTRACT: Wrapper around a memory-mapped scalar ref our $VERSION = '0.120'; # VERSION sub size { length(${(shift)}) } sub new { my ($class, $fname)= @_; my $map; my $self= bless \$map, $class; map_file $map, $fname; $self; } 1;