my %hash = @array;
将数组转换为哈希值,但如何使用 $ hash {something} 执行相同操作?
答案 0 :(得分:6)
$hash{something} = { @array };
它周围的{}
会创建一个hashref。
答案 1 :(得分:5)
当你写:
my %hash = @array;
Perl看到的是:
my %hash = ($array[0], $array[1], ... $array[$#array]);
因此@array
被扩展为一个列表,该列表被分配给复数%hash
。该列表必须包含偶数个元素,否则您将收到警告(假设您在脚本中使用use warnings;
,您应始终使用use strict;
。@array
。
进一步细分,它是:
my %hash; $hash{$array[0]} = $array[1]; $hash{$array[2]} = $array[3]; ... $hash{$array[$#array - 1]} = $array[$#array];
所以解释从%hash
到$HoH{key} = \%hash;
的转换,将此哈希插入到特定键的哈希哈希值中:
\
%hash
字符引用%hash
的位置。如果其他地方不需要{
my %hash = @array;
$HoH{key} = \%hash;
}
,您可以使用块来约束它:
do {...}
使用$HoH{key} = do {my %hash = @array; \%hash};
会缩短一点:
$HoH{key} = { @array };
但不会短得多。如果上述内容对您来说似乎很乏味,那应该是。在Perl中,上述结构可以简化为:
{...}
do {my %hash = (...); \%hash}
表示匿名哈希引用构造函数,等同于
{...}
除了[...]
之外,Perl还提供...
构造来创建匿名数组引用。两个构造的{{1}}都看到了列表上下文。