1

DBM::Deepハッシュ オブジェクトを次のように使用しています。

my $dbm = DBM::Deep->new(
        file      => "dbm.db",
        locking   => 1,
        autoflush => 1,
        type      => "DBM::Deep->TYPE_HASH",
        );
#code..
$dbm = $hash_reference;

ただし、これは機能しません。$dbm はプログラム中に正しい値を保持しますが、終了後は dbm.db が空になり、dbm.db を使用しようとする別のプログラムを起動すると、何もありません。しかし、次のようにハッシュ参照をコピーするたびに (これは 2 レベルの深いハッシュです):

    for my $id (keys %$hash_reference) {
        for(keys %{$hash_reference->{$id}}) {
            $todo->{$id}->{$_} = $hash_reference->{$id}->{$_};
        }
    }

その後、すべてが正しくコピーされ、プログラムの実行後も値が残ります。DBM の作成者は、彼の DBM::Deep オブジェクトが通常のハッシュと同じように機能することを強調しているようですが、これを行うためのより簡単な方法があるかどうかは誰にもわかりませんか? ありがとう!

4

1 に答える 1

5

あなたはオブジェクトを捨てています。代わりにこれを試してください:

%$dbm = %$hash_reference;
于 2012-08-03T22:33:11.407 に答える