我继承了一段带有片段的代码,该片段将数据库清空如下:
dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
delete $db{$key};
}
dbmclose (%db);
这通常没问题但有时数据库在调用此清理代码之前会变得非常大,而且通常是在用户想要做一些重要的事情时。
有更好的方法吗?
答案 0 :(得分:10)
您可以删除该文件:
unlink $file;
由于dbmopen的第三个参数是文件模式而不是undef
,dbmopen
将在下次调用时重新创建文件:
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);