Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I efficiently empty a Perl DBM file?

Tags:

perl

dbm

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?

like image 818
paxdiablo Avatar asked Oct 13 '08 04:10

paxdiablo


2 Answers

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;
like image 94
brian d foy Avatar answered Oct 01 '22 03:10

brian d foy


Actually, a workmate has pointed me to a solution. You can apparently do:

dbmopen (%db,"file.db",0666);
%db = ();
dbmclose (%db);

which clears out the hash before closing the database.

like image 43
paxdiablo Avatar answered Oct 01 '22 05:10

paxdiablo