【问题标题】:How do I efficiently empty a Perl DBM file?如何有效地清空 Perl DBM 文件?
【发布时间】:2008-10-13 04:42:33
【问题描述】:

我继承了一段带有 sn-p 的代码,它清空数据库,如下所示:

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

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

有更好的方法吗?

【问题讨论】:

    标签: perl dbm


    【解决方案1】:

    你可以直接删除文件:

    unlink $file;
    

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

    dbmopen my %db, $file, 0666;
    

    【讨论】:

      【解决方案2】:

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

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

      在关闭数据库之前清除散列。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-15
          • 1970-01-01
          • 2011-01-15
          • 2011-11-14
          • 2016-08-03
          • 1970-01-01
          • 2019-11-18
          • 1970-01-01
          相关资源
          最近更新 更多