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

nin*_*nes 0 perl

my %hash = @array;
Run Code Online (Sandbox Code Playgroud)

将数组转换为哈希值,但如何使用$ hash {something}做同样的事情

Dav*_*ous 6

$hash{something} = { @array };
Run Code Online (Sandbox Code Playgroud)

{}周围创建一个hashref.

  • 不,在它周围放置{}会创建一个匿名哈希,其内容从数组中提取.他可能想要这样:`$ hash {something} = [@array];`这会创建一个匿名数组,并在由'something'键入的哈希值中存储对它的引用. (2认同)

Eri*_*rom 5

当你写:

my %hash = @array;
Run Code Online (Sandbox Code Playgroud)

Perl看到的是:

my %hash = ($array[0], $array[1], ... $array[$#array]);

因此,它@array被扩展为一个列表,该列表被分配给复数%hash.该列表必须具有偶数个元素,否则您将收到警告(假设您use warnings;在脚本中使用,您也应该使用它 use strict;).

细分甚至更多,它是:

my %hash;
$hash{$array[0]} = $array[1];
$hash{$array[2]} = $array[3];
...
$hash{$array[$#array - 1]} = $array[$#array];   

因此,从转换@array%hash解释,将此哈希插入到特定键的哈希哈希中:

$HoH{key} = \%hash;
Run Code Online (Sandbox Code Playgroud)

\角色需要一个参考%hash.如果%hash在其他地方不需要,你可以用块来约束它:

{
    my %hash = @array;
    $HoH{key} = \%hash;
}
Run Code Online (Sandbox Code Playgroud)

使用a do {...}使它更短:

$HoH{key} = do {my %hash = @array; \%hash};
Run Code Online (Sandbox Code Playgroud)

但不会短得多.如果上述内容对您来说似乎很乏味,那应该是.在Perl中,上面的结构可以简化为:

$HoH{key} = { @array };
Run Code Online (Sandbox Code Playgroud)

其中,{...}表示匿名哈希引用构造函数,相当于

do {my %hash = (...); \%hash}
Run Code Online (Sandbox Code Playgroud)

除此之外{...},Perl还提供了[...]用于创建匿名数组引用的构造.在...这两种结构的看到列表环境.