使用Perl中的切片初始化一组哈希键

Håk*_*and 2 perl hash

我正在尝试使用切片初始化哈希:

use warnings;
use strict;
use Data::Dump qw(dump);

my %h;
my $a=['a','b'];

@h{@$a}=(1)x@$a;
dump(%h);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我尝试做一个子哈希,例如 %h{test}

@h{test}{@$a}=(1)x@$a;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Scalar value @h{test} better written as $h{test} at ./p.pl line 14.
syntax error at ./p.pl line 14, near "}{"
Execution of ./p.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

Vad*_*aev 8

您应该使用,@{ $h{test} }{ @$a }=(1)x@$a;因为哈希包含哈希引用,而不是哈希.

use warnings;
use strict;
use Data::Dumper;

my %h;
my $a=['a','b'];

@{ $h{test} }{ @$a }=(1)x@$a;
print Dumper(\%h);
Run Code Online (Sandbox Code Playgroud)

输出是:

$VAR1 = {
          'test' => {
                      'a' => 1,
                      'b' => 1
                    }
        };
Run Code Online (Sandbox Code Playgroud)

另请参阅:Perl:Hash ref访问键组

  • 如果正确呈现,语法很简单; 请参阅http://perlmonks.org/?node=References+quick+reference (2认同)