如何将数组嵌套在哈希初始化器中?

时间:2018-07-21 17:13:21

标签: perl

在Perl中,是否可以将一个数组嵌套在一个散列初始化程序的内部作为一条语句?以及以后如何解决和访问哈希内部的嵌套数组?我知道如何通过将其分解为单独的语句来执行此操作。。。如何仅使用哈希的一个初始化程序来执行此操作?示例:

伪代码:

%hash = {
     Param1 => "value1",
     Param2 => "value2",
     ParamArray => @(
         "Array1",
         "Array2",
     )
}

# Also, is how I would deref the nested array?
@Array1 = @{$hash{ParamArray}};

2 个答案:

答案 0 :(得分:2)

哈希值只能是标量,不能是数组。诀窍是使用对数组的引用。

my @array = ( "Array1", "Array2" );

my %hash = (
   Param1     => "value1",
   Param2     => "value2",
   ParamArray => \@array,
);

您可以使用[]创建一个匿名数组。它返回对该数组的引用。因此,以下内容等同于上述内容:

my %hash = (
   Param1     => "value1",
   Param2     => "value2",
   ParamArray => [ "Array1", "Array2" ],
);

无论哪种情况,您都可以使用

say for @{ $hash{$ParamArray} };

我不会使用以下内容,因为它会不必要地复制数组:

my @array = @{$hash{ParamArray}};
say $array[0];

相反,我将使用对该数组的引用。

my $array_ref = $hash{ParamArray};
say $array_ref->[0];

答案 1 :(得分:1)

您可以使用数组引用来做到这一点:

$hash = {
    Param1 => "value1",
    Param2 => "value2",
    ParamArray => [
        "Array1",
        "Array2",
    ]
}

方括号是构成数组引用文字的语法。另外,由于{}也会进行引用,因此您还需要使用标量符号作为哈希值。为了访问元素,您需要取消引用散列和嵌套数组,就像这样:

 @{$hash->{ParamArray}}

编辑:

没有注意到哈希引用。

相关问题