Perl哈希问题

Perl哈希问题,perl,Perl,我被一个又一个的哈希弄糊涂了,找不到解决办法 我有一些杂凑 %myHash = {'e5' => '0', 'f7' => 'b'}; %myHash2 = {'e5' => '1', 'f7' => 'a'}; %newHash; $newHash{'move0'} = {%myHash}; $newHash{'move1'} = {%myHash2}; print Dumper(\%newHash); 输出: $newHash = { 'mov

我被一个又一个的哈希弄糊涂了,找不到解决办法

我有一些杂凑

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

 $newHash = {
          'move0' => {
                       'e5' => '0',
                       'f7' => 'b'
                     }, 
          'move1' => {
                       'e5' => '1',
                       'f7' => 'a'
                     } 
            };
然后,当我尝试从我的散列中提取一个散列并将其存储在散列中时,我无法让它工作

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

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

我尝试了许多其他方法从散列中获取散列并将其分配给散列,但它不起作用。

要复制散列,可以使用

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,
);

然后


您应该使用
strict
warnings
pragma。然后你会从编译器那里得到这里发生的事情的线索。大括号将生成哈希引用。您可能想使用括号(而不是卷曲),例如:
my%myHash=('e5'=>'0','f7'=>'b')
?这将生成一个常规散列(不是对散列的引用)
使用严格。这里有一些基本语法错误,如果这些pragma生效,您就会知道这些错误。你也应该在没有警告的情况下收到警告,不是吗?这是对我代码的删节,我在我的主程序中使用了严格的警告等。他们认为你使用了
使用警告因为您的代码发出警告。但实际上这根本不是问题所在。真正的问题是你对你运行的代码撒了谎。请修复您的问题,使其中的代码实际生成其中的输出。这不会在
使用strict时运行。不能将标量
{..}
分配给哈希
%h
my %data = (
   move0 => { e5 => '0', f7 => 'b' },
   move1 => { e5 => '1', f7 => 'a' },
);
my $move = $data{move0};