将数组放入哈希哈希中,将其转换为哈希本身

时间:2011-03-27 18:51:59

标签: perl

my %hash = @array;

将数组转换为哈希值,但如何使用 $ hash {something} 执行相同操作?

2 个答案:

答案 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}}都看到了列表上下文。