下面是我需要帮助的代码。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my @arrayElements = ('Array Functions');
print join(", ", @arrayElements);
### Output => Array Functions
my %hashElements = ();
我想将@arrayElements
的内容分配给$hashElements{Item}
缺少一些核心概念或尝试出错,并且为此付出了一段时间。
答案 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
,它更易于阅读和键入。
看看以下资源,以了解有关我上面提到的概念的更多信息。