Hash Perl在向匿名散列添加新的键/值对时遇到问题

Hash Perl在向匿名散列添加新的键/值对时遇到问题,hash,key,anonymous,Hash,Key,Anonymous,实际上,我使用的是我发现的一个人工哈希,并试图添加新的键值对,但perl报告“编译错误:(F)可能意味着您有语法错误” 散列是 my $selected = 'box'; my $d = $design->{$selected}; my $design = { box => { ne => {data => 'north-east'}, nw => {data => 'north-west'}, n =

实际上,我使用的是我发现的一个人工哈希,并试图添加新的键值对,但perl报告“编译错误:(F)可能意味着您有语法错误” 散列是

 my $selected = 'box';
 my $d = $design->{$selected};

my $design = {
    box => {
       ne => {data => 'north-east'},
       nw => {data => 'north-west'},
       n  => {data => 'north'},
       s  => {data => 'south'},
       e  => {data => 'east'},
       w  => {data => 'west'},
       se => {data => 'south-east'},
       sw => {data => 'south-west'},
    }
 };
为了添加一个新的键/值对,我已经尝试了acoss提供的所有语法:

%{$design} = eastside=>ne;
$design{box}->{eastside}=Data=>ne;
%{$design}{box}={eastside=>Data=>ne};

这些都不起作用(以及它们的变体)。这是因为它是一个复杂的散列吗?

下面是对试图添加到散列中的三行代码的重写,语法已更正。它可能不是您想要的确切代码,但它不应该再抛出错误

#%{$design} = eastside=>ne;
$design{eastside} = 'ne';

#$design{box}->{eastside}=Data=>ne;
$design{box}{eastside} = {data => 'ne'};

#%{$design}{box}={eastside=>Data=>ne};
$design{box} = {eastside => {Data => 'ne'}};
我最初的想法可能是不正确的,因为我对perl有些生疏: 看起来像是hash$design,您从Dumper的输出开始,而不是定义hash的实际perl语法

尝试如下定义哈希:

use Data::Dumper;
my %design
$design{'box'}{'ne'} = {'data' => 'north-east'};
$design{'box'}{'n'} = {'data' => 'north'};
$design{'box'}{'nw'} = {'data' => 'north-west'};

print $design{'box'}{'nw'}{'data'};
print "\n";
print Dumper(\%design);
这将产生:

north-west
$VAR1 = {
      'box' => {
                 'n' => {
                          'data' => 'north'
                        },
                 'ne' => {
                           'data' => 'north-east'
                         },
                 'nw' => {
                           'data' => 'north-west'
                         }
               }
    };

我从这里发布的另一个问题中获取了散列:我对perl非常生疏,但是我无法通过这种方式获得散列定义,但是我描述的方法能够创建所需的结果。也许可以看看你是否能用设置散列的更简单的方法来完成整个工作,看看你是否能从中进行调整。@MartinKenley更新了答案,更正了你要添加到散列中的代码。希望能有更多的帮助。这是有效的:
code
$d->{'eastside'}={'Data'=>['ne','e','se']};