arrays - Perl - 将数组分配给另一个变量

标签 arrays hash perl

我正在尝试将一个数组分配给我的散列中的一个值,如下所示:

$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/

相关文章:

c# - 在类初始值设定项中使用隐式类型数组

string - 比较长字符串的哈希值

python - Python 上的 SHA-512 验证

c++ - 当一个单独的应用程序写入日志文件时从日志文件中读取数据

javascript - 如何在javascript中将数组对象更改为嵌套对象

php - 如果定义 -php 则添加到数组

php - 我是否必须使用 foreach 才能访问该值?

php - 密码盐存储

php - 启用 OCS Inventory WebService 接口(interface)以查询 Assets 数据

perl - 我应该使用 Perl 和 Tk 在 Windows 上构建 GUI 应用程序吗?