Perl:将数组分配给哈希值?

ola*_*ala 1 arrays perl hash

我试图发起一个有7个NAs作为值的哈希.

这就是我所拥有的:

values %hash = ("NA") x 7;
print join("\t",values %hash),"\n";
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

Can't modify values in scalar assignment at line 22, near "7;"
Run Code Online (Sandbox Code Playgroud)

显然,虽然我可以将数组分配给散列键,但我无法使用散列值来执行此操作

keys %hash = ["a","b","c","d","e","f","g"];
Run Code Online (Sandbox Code Playgroud)

为什么它适用于键而不是哈希赋值的值?

amo*_*mon 5

来自perldoc -f keys:

用作左值,"keys"允许您增加为给定散列分配的散列桶的数量.如果您知道哈希值会变大,这可以获得一定的效率.

即这种方法对于设置密钥没有用,只为一定数量的条目分配空间.当使用引用作为数字时,结果可能会非常大,会占用大部分内存 - 不完全推荐.

要使用某些值初始化哈希,您必须指定所需的键.但您可以使用切片作为左值:

my %hash;
@hash{1..7} = ("NA") x 7;
Run Code Online (Sandbox Code Playgroud)

注意:左值是可以在赋值左侧使用的值.