You might want to consider possibly using
DBM::Deep for this, especially as your data requirements either grow or start to encompass arrays.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?