It's not optimized as of yet, but you could use
DBM::Deep as an array. It's persistent and concurrent-access safe. It even has ACId transactions. If performance becomes a major concern, I can do some optimization on shift and unshift.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?