If you are going to stick with a DBM format, you are probably best off going with BerkeleyDB since it can easily handle large text fields and has a variety of locking options. You might also look at
DBM::Deep for an alternative. OTOH, if you use a relational database system you can leverage on the many modules already created to do things like the CGI interaction, locking, etc. Going with a relational database doesn't necessarily mean using SQL since any
DBI accessible database can be accessed with multi-level hashes or objects with modules like
Tie::DBI,
AnyData, or
Class::DBI. Learning SQL won't hurt either your career prospects or your code reuse (though it may warp your mind). If you need to transition your text file to a relational database, modules like
DBD::CSV and
DBD::AnyData can make that pretty painless.