2017-10-10 213 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