There is no particular problem with the way you’re doing this.
MLDBM is worthwhile when the hash is huge; then it allows you to leave most data on disk and only pick up as much as you need in the moment. This means reduced waste in I/O, time spent on de-seriliasing data, and memory to hold it. But if you can afford to slurp all of the data, there is little reason not to; since MLDBM sits atop Storable (or atop Data::Dumper, which is slower) plus a DBM hash module, it certainly can’t be any faster than Storable alone if you’re only ever processing a small amount of data.
So from your question as is, I don’t see much reason for you to change your approach.
Makeshifts last the longest.