我继承了一段带有代码片段的代码,该代码段清空数据库,如下所示:
dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
delete $db{$key};
}
dbmclose (%db);
Run Code Online (Sandbox Code Playgroud)
这通常是可以的,但有时数据库在调用此清理代码之前会变得非常大,并且通常在用户想要执行重要操作时.
有没有更好的方法呢?
bri*_*foy 10
你可以删除文件:
unlink $file;
Run Code Online (Sandbox Code Playgroud)
由于dbmopen的第三个参数是文件模式而不是undef
,因此dbmopen
将在下次调用时重新创建文件:
dbmopen my %db, $file, 0666;
Run Code Online (Sandbox Code Playgroud)
实际上,一位同事指出了我的解决方案.你显然可以这样做:
dbmopen (%db,"file.db",0666);
%db = ();
dbmclose (%db);
Run Code Online (Sandbox Code Playgroud)
在关闭数据库之前清除哈希值.
这里有另一个答案,由于某种原因已经消失,但它可能会更快,所以我重新发布它(不知道为什么它被删除).它涉及取消链接文件以删除它,然后只是重新创建一个空白数据库文件,如下所示:
unlink ("file.db");
dbmopen (%db,"file.db",0666);
dbmclose (%db);
Run Code Online (Sandbox Code Playgroud)