2017-10-10 242 views
-2

我對哈希的哈希感到困惑,找不到解決方案。哈希的Perl哈希問題

我有一些哈希

%myHash = {'e5' => '0', 'f7' => 'b'}; 
%myHash2 = {'e5' => '1', 'f7' => 'a'}; 
%newHash; 
$newHash{'move0'} = {%myHash}; 
$newHash{'move1'} = {%myHash2}; 
print Dumper(\%newHash); 

OUTPUT:

$newHash = { 
      'move0' => { 
         'e5' => '0', 
         'f7' => 'b' 
        }, 
      'move1' => { 
         'e5' => '1', 
         'f7' => 'a' 
        } 
      }; 

後來,當我嘗試並獲得一個哈希我的哈希散列並將其存儲在一個哈希我不能讓它開始工作。

my %hash = {$newHash{"move0"}}; 
print Dumper(\%hash); 

輸出:

$hash = { 
      'HASH(0x26b7d40)' => undef 
     }; 

我試圖從哈希散列得到我的哈希並將其分配給一個散列,但它不工作的許多其他方式。

+2

您應該使用'strict'和'warnings'編譯。然後你會從編譯器中得知這裏發生了什麼。大括號生成一個哈希引用。你可能打算使用括號(而不是curlies):'my%myHash =('e5'=>'0','f7'=>'b')'?這會生成一個常規的散列(不是對散列的引用)。 –

+2

總是放在程序的頂部:'使用警告;'和'嚴格使用''。這裏有基本的語法錯誤,你可以通過這些編譯指示來了解它們。如果沒有他們,你應該得到警告,不是嗎? – zdim

+0

這是我的代碼的剪切,我在我的主程序中使用嚴格的警告等。 – omeanwell

回答

7

爲了使哈希值的副本,一個使用

my %dst = %src; 

你必須散列的引用,所以這將是

my %dst = %{ $newHash{move0} }; 

但所有的浪費的副本是什麼???使用

my %move0 = (e5 => '0', f7 => 'b'); 
my %move1 = (e5 => '1', f7 => 'a'); 
my %data = (
    move0 => \%move0, 
    move1 => \%move1, 
); 

my %data = (
    move0 => { e5 => '0', f7 => 'b' }, 
    move1 => { e5 => '1', f7 => 'a' }, 
); 

然後

my $move = $data{move0}; 
+0

謝謝你 - 解決了我的問題! – omeanwell