如何在perl的哈希数组中访问数组?

时间:2016-08-01 22:55:18

标签: arrays perl hash

我有一个散列数组,其中一个散列值是一个数组。 - >我把“@title”推到“部分” 并用于打印, - >我将每本书{part}放在一个临时数组中以访问标题的每个元素,但它只打印第一个元素 我无法访问数组“books”中“title”的所有元素

@books = ();
@title = (1,2,3,4,5);
push @books,{subject=>"hello" , part =>@title };
for($i=0;$i<scalar(@books);++$i)
{
    print $books[$i]{subject};

    @temp = $books[$i]{part};
    for($j=0;$j<scalar(@temp);++$j)
    {
        print $temp[$j]; #this print just first element "1"
    }
}

1 个答案:

答案 0 :(得分:4)

这里的问题是您正在推送@books数组的哈希引用未正确创建。

您正在创建的哈希引用如下所示:

 {  'subject' => 'hello',
    'part'    => 1,
    '2'       => 3,
    '4'       => 5,
 }

当你可能期望它看起来像这样:

{  'subject' => 'hello',
   'part' => [
        1,
        2,
        3,
        4,
        5,
    ],
}

这是因为哈希和数组中的值必须是 SCALAR值。要正确创建哈希引用以将引用存储到密钥@title下的part数组,您需要使用\创建引用:

push @books, { subject => "hello", part => \@title };

注意:这也意味着当您想要将part密钥提取到@temp数组中时,您需要取消引用它(因为它是一个数组引用):

@temp = @{ $books[$i]{part} };