Search code examples
perldbm

How do I efficiently empty a Perl DBM file?


I've inherited a piece of code with a snippet which empties the database as follows:

dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
  delete $db{$key};
}
dbmclose (%db);

This is usually okay but sometimes the database grows very large before this cleanup code is called and it's usually when a user wants to do something important.

Is there a better way of doing this?


Solution

  • You can just delete the file:

    unlink $file;
    

    Since your third argument to dbmopen is a file mode and not undef, dbmopen will recreate the file the next time it's called:

    dbmopen my %db, $file, 0666;