Perl将数组元素分配给哈希用户定义的键

时间:2018-06-27 17:51:49

标签: perl

下面是我需要帮助的代码。

#!/usr/bin/perl -w
use strict;

use Data::Dumper;

my @arrayElements = ('Array Functions');
print join(", ", @arrayElements);
### Output => Array Functions

my %hashElements = ();

我想将@arrayElements的内容分配给$hashElements{Item} 缺少一些核心概念或尝试出错,并且为此付出了一段时间。

1 个答案:

答案 0 :(得分:4)

您似乎缺少了Perl(或一般编程)的一些核心概念。如果您是通过书本或在线教程来学习Perl,建议您重新阅读有关数组和哈希的章节。

让我们看看这里涉及的事情。你有:

  • @arrayElements,这是一个数组。它包含一个包含一个元素的列表,字符串'Array Functions'
  • %hashElements,这是哈希。它是空的。
  • $hashElements{Item},这是一个标量值。您要设置它。

您说您希望$hashElements{Item}具有值'Array Functions',该值作为数组@arrayElements中的第一个元素。

$hashElements{Item} = $arrayElements[0];

就是这样。 $hashElements{Item}$arrayElements[0]均为标量值。这就是为什么他们的 sigils (前面的符号)从@(对于数组)或%(对于哈希)变为$的原因。您可以通过用于访问元素的方括号来区分该值是散列还是数组。 []用于数组,{}用于哈希。

但是您不能执行以下操作。

$hashElements{Item} = @arrayElements;

由于$hashElements{Item}是一个标量,因此赋值右侧的内容将在标量上下文中被处理。标量上下文中的数组将转换为数组中元素的数量,因此将分配1。那不是你想要的。

您应该真正阅读更多有关此的内容,并为变量选择更好的名称。您的示例非常令人困惑。通常,在Perl中我们不对变量名进行$CamelCase,而是使用$snake_case,它更易于阅读和键入。

看看以下资源,以了解有关我上面提到的概念的更多信息。

Perl Mavenperldataperldsc