2012-08-03 76 views
1

我使用的是DBM::Deep哈希對象,像這樣的工作:DBM ::深不使用Perl散列引用

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的程序時,它沒有任何內容。但每當我複製這樣的散列引用(這是一個兩級深哈希):

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

然後將複製所做的一切正確的價值觀仍然會執行程序後在那裏。 DBM作者似乎強調,儘管他的DBM :: Deep對象像常規哈希一樣工作,但是有誰知道是否有更簡單的方法來執行此操作?謝謝!

回答

5

你扔掉了物體。試試這個:

%$dbm = %$hash_reference; 
+0

你的意思是我丟掉了DBM對象,因爲在分配它之後它只是一個普通的perl哈希引用? – srchulo 2012-08-04 00:25:52

+0

@srchulo A-yup。 – tchrist 2012-08-04 00:48:16

+0

是的,替換綁定引用內的散列,而不是用純引用替換綁定的引用。 – zostay 2012-08-04 02:31:22