Fitting arbitrary complex data into a relational data may be hard. Very hard. Using MLDBM or similar (DBM::Deep looks interesting) is much easier. To the original questioner: are you using DB_File or GDBM_File as the database backend? The default SDBM_File has many drawbacks (limited record size, missing EXISTS is implemented only since 5.6.1).