如何有效地清空Perl DBM文件?

时间:2008-10-13 04:42:34

标签: perl dbm

我继承了一段带有片段的代码,该片段将数据库清空如下:

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

这通常没问题但有时数据库在调用此清理代码之前会变得非常大,而且通常是在用户想要做一些重要的事情时。

有更好的方法吗?

3 个答案:

答案 0 :(得分:10)

您可以删除该文件:

unlink $file;

由于dbmopen的第三个参数是文件模式而不是undefdbmopen将在下次调用时重新创建文件:

dbmopen my %db, $file, 0666;

答案 1 :(得分:6)

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

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

在关闭数据库之前清除哈希值。

答案 2 :(得分:6)

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

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