是否有简单的语法来声明perl中有一个值的多个键?

Dav*_*ave 9 syntax perl hashtable

是否有一种简单的方法来声明具有多个键的散列,这些键都指向perl中的相同值?

这是类似于我正在寻找的东西(我实际上不知道这是否有效):

my $hash = {
             a, b, c => $valA,
             d, e, f => $valB
           };
Run Code Online (Sandbox Code Playgroud)

这样....

print $hash->{a}; #prints $valA
print $hash->{b}; #prints $valA
print $hash->{c}; #prints $valA
print $hash->{d}; #prints $valB
print $hash->{e}; #prints $valB
print $hash->{f}; #prints $valB
Run Code Online (Sandbox Code Playgroud)

Rob*_*ert 20

你可以这样写:

my %hash;
$hash{$_} = $valA for qw(a b c);
$hash{$_} = $valB for qw(d e f);
Run Code Online (Sandbox Code Playgroud)


Hen*_*olm 12

不,没有简单的语法.(实际上,=>记录为别名,,其唯一的形式效果是即使在严格模式下它也允许在其左边使用裸字).

如果没有定义自己的潜艇,你可以做的最好的事情可能是这样的

@hash{qw(a b c)} = ($valA) x 3 ;
@hash(qw(d e f)} = ($valB) x 3 ;
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 10

我喜欢在一侧使用哈希切片而在另一侧使用列表复制运算符.我使用keys数组的标量值来确定要复制的值的数量:

 @hash{ @keys } = ($value) x @keys;
Run Code Online (Sandbox Code Playgroud)


Eri*_*rom 6

没有内置语法,但您可以随时编写自己的语法:

my $value = sub {map {$_ => $_[1]} @{$_[0]}};

my $hash = {
    [qw(a b c)]->$value('valA'),
    [qw(d e f)]->$value('valB'),
};

say join ', ' => map "$_: $$hash{$_}", sort keys %$hash;
# a: valA, b: valA, c: valA, d: valB, e: valB, f: valB
Run Code Online (Sandbox Code Playgroud)

如果你想这是做了很多,你可能想看看Hash::Utilhv_store功能,它允许您加载多个键具有完全相同的内存位置.