次のようにデータベースを空にするスニペットを含むコードを継承しました。
dbmopen (%db,"file.db",0666);
foreach $key (keys %db) {
delete $db{$key};
}
dbmclose (%db);
これは通常は問題ありませんが、このクリーンアップ コードが呼び出される前にデータベースが非常に大きくなることがあります。これは通常、ユーザーが何か重要なことをしたい場合です。
これを行うより良い方法はありますか?
ファイルを削除するだけです:
unlink $file;
dbmopenの 3 番目の引数はundef
ではなくファイル モードであるためdbmopen
、次に呼び出されたときにファイルが再作成されます。
dbmopen my %db, $file, 0666;
実際、同僚が解決策を教えてくれました。あなたはどうやらできる:
dbmopen (%db,"file.db",0666);
%db = ();
dbmclose (%db);
データベースを閉じる前にハッシュをクリアします。
何らかの理由で消えた別の回答がここにありましたが、より高速である可能性が高いため、再投稿しています(なぜ削除されたのかわかりません)。ファイルのリンクを解除して削除し、次のように空のデータベース ファイルを再作成する必要があります。
unlink ("file.db");
dbmopen (%db,"file.db",0666);
dbmclose (%db);