【问题标题】:Perl trouble adding new key/value pairs to anonymous hashPerl 无法将新的键/值对添加到匿名哈希中
【发布时间】:2018-05-01 00:41:34
【问题描述】:

为了练习,我正在使用我找到的人为散列,并尝试添加新的键值对,但 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'},
    }
 };

为了添加一个新的键/值对,我已经尝试了所有我能想到的语法:

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

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

【问题讨论】:

    标签: hash key anonymous


    【解决方案1】:

    这里是您尝试添加到哈希的三行的重写,语法已更正。它可能不是您想要的确切代码,但它不应再引发错误。

    #%{$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 生疏了: 看起来您开始使用的散列 $design 是 Dumper 的输出,而不是用于定义散列的实际 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'
                             }
                   }
        };
    

    【讨论】:

    • 我从这里发布的另一个问题中获取了哈希值:stackoverflow.com/questions/25474411/…
    • 我对 perl 非常生疏,但我无法以这种方式定义哈希,但我描述的方法能够创建所需的结果。也许看看你能不能用更简单的方法来设置哈希,看看你是否可以从那里调整。
    • @MartinKenley 更新了答案,更正了您的代码以添加到哈希中。希望对您有所帮助。
    • 这有效:code $d->{'eastside'}={'Data'=>['ne', 'e', 'se']};
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 2019-04-12
    • 2022-07-21
    • 1970-01-01
    相关资源
    最近更新 更多