我有一个散列数组,其中一个散列值是一个数组。 - >我把“@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"
}
}
答案 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} };