my %hash = @array;
Run Code Online (Sandbox Code Playgroud)
将数组转换为哈希值,但如何使用$ hash {something}做同样的事情?
$hash{something} = { @array };
Run Code Online (Sandbox Code Playgroud)
它{}周围创建一个hashref.
当你写:
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还提供了[...]用于创建匿名数组引用的构造.在...这两种结构的看到列表环境.