2008-10-13 62 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);