我正在尝试将一个数组分配给我的散列中的一个值,如下所示:
$authors->[$x]->{'books'} = @books;
$authors
是一个散列数组,其中包含他/她的名字、姓氏、出生日期等。现在我正在创建一个 books
键,我想在其中分配一组书籍。但是,当我尝试在后面打印它时,它只是打印数组的大小,就好像我在做 $value = scalar @books
一样。
我做错了什么?
最佳答案
数组元素和散列值都是标量,所以在嵌套数组和散列时,必须使用引用。正如 $authors->[$x]
不是哈希而是对哈希的引用一样,您必须设置 $authors->[$x]->{'books'}
到数组的引用。
$authors->[$x]->{'books'} = \@books; # reference the original array
$authors->[$x]->{'books'} = [@books]; # reference a copy
然后您可以使用类似的方式访问数组的元素
$authors->[$x]->{'books'}->[0]
可以缩写
$authors->[$x]{books}[0]
或者访问整个数组作为
@{$authors->[$x]{books}}
你最初的尝试
$authors->[$x]->{'books'} = @books;
完全等同于
$authors->[$x]->{'books'} = scalar @books;
因为 =
运算符的左操作数是一个散列值,它是一个标量,所以右操作数是在标量上下文中计算的,以提供可以在那里赋值的东西。
附言
在重读这个答案时,我意识到说“散列值是标量”可能会造成混淆,因为“散列值”可能被解释为“散列变量的值”,即“整个散列”。当我写“散列值”时,我的意思是存储在散列中作为值(而不是键)的项目。
关于arrays - Perl - 将数组分配给另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397146/