Perl を使用して BerkeleyDB の行を削除する

Perl を使用して BerkeleyDB の行を削除する

私は Perl や BerkelyDB の経験がありません。メールのリストと UNIX タイムスタンプを持つ巨大な BerleleyDB を持っています。タイムスタンプが古い (100 日以上経過している) メールを削除するには、助けが必要です。

Perlコードのこのセクションがあります

#!/usr/local/perls/perl-5.26.1/bin/perl

  use BerkeleyDB;

  my $filename = '/usr/local/assp/whitelist.bdb';
  my $dbh = new BerkeleyDB::Hash(
          -Filename => $filename)
          or die "Error opening $filename : $! $BerkeleyDB::Error\n";

 my $cursor = $dbh->db_cursor() ;
    while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
        print "Key: " . $k . ", value: " . $v . "\n";

    }

### Close the Berkeley DB
untie $filename;
exit; 

キー($k)と値($v)を持つすべての行を表示します。

結果は次のようになります

Key: [email protected], value: 1578560300
Key: [email protected],[email protected], value: 1578643050
Key: [email protected], value: 1578643050 

削除するPerlコードを追加するのを手伝ってくれる人はいますか?その間上記の実行では、UNIX タイムスタンプ値が 100 日以上古いすべてのキー行が表示されますか?

答え1

ただ使うだけc_del 文書化された通りつまり

my $long_ago = time() - 100*24*60*60; # 100 days ago
...
while ($cursor->c_get($k, $v, DB_NEXT) == 0) {
    if ($v<$long_ago) {
        $cursor->c_del();
    }
}

関連情報