2008-10-13 46 views
7

我继承了一段代码与清空数据库,如下所示的代码段:如何有效清空Perl DBM文件?

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

这通常是好的,但有时这种清理代码调用之前数据库变得非常大,它通常是当用户想要做一些重要的事情。

有没有更好的方法来做到这一点?

回答

10

您可以直接删除文件:

unlink $file; 

由于您的第三个参数dbmopen是一个文件模式,不是undef,dbmopen会在下次调用该文件时重新创建该文件:

dbmopen my %db, $file, 0666; 
6

其实,一位同事指出了我的解决方案。你显然可以这样做:

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

在关闭数据库之前清除散列。

6

这里有另一个答案,由于某种原因已经消失,但它可能会更快,所以我转发它(不知道为什么它被删除)。它涉及取消与相应文件将其删除,然后只重新创建一个空数据库文件,如下所示:

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