Perl“不是ARRAY引用”错误

时间:2011-08-17 14:34:57

标签: perl hash

如果有人可以告诉我我的错误,我会很高兴的:

my %mymap; 
@mymap{"balloon"} = {1,2,3};

print $mymap{"balloon"}[0] . "\n";

4 个答案:

答案 0 :(得分:6)

$mymap{'balloon'}哈希而不是数组。表达式{1,2,3}创建一个哈希:

 {
   '1' => 2,
   '3' => undef
 }

您已将其分配到%mymap片段,对应于键:('balloon')。由于键列表是1项且值列表是一项,因此您执行的操作与

相同
$mymap{'balloon'} = { 1 => 2, 3 => undef };

如果您使用过strictwarnings,那么就会让您知道错误。我得到了:

Scalar value @mymap{"balloon"} better written as $mymap{"balloon"} at - line 3. Odd number of elements in anonymous hash at - line 3.

答案 1 :(得分:4)

如果你曾经使用'use strict;使用警告;'在代码的顶部,您可能有更好的错误消息。

您正在做的是创建名为 mymap 的哈希。哈希将数据存储为key =>价值对。 然后,您将为键气球分配数组引用。你剪掉的小代码有两个问题:1。你没有解决mymap hash,2。如果你想传递一个列表,你应该使用方括号:

my %mymap;
$mymap{"balloon"} = [1,2,3];
print $mymap{"balloon"}[0] . "\n";

这会打印'1'。

您也可以使用数组:

my @balloon = (1,2,3);
print $balloon[0] . "\n";

答案 2 :(得分:3)

嗯,首先,总是use strict; use warnings;。如果你有,它可能会告诉你这里有什么问题。

以下是您在计划中所做的事情:

my %mymap;  # declare hash %mymap
@mymap{"balloon"} = {1,2,3};  # attempt to use a hash key on an undeclared 
                              # array slice and assign an anonymous hash to it

print $mymap{"balloon"}[0] . "\n";  # print the first element of a scalar hash value

为了做到你想要的,做:

my %mymap = ( 'balloon' => [ 1,2,3 ] );
print $mymap{'balloon'}[0];

答案 3 :(得分:1)

好的,有些事情......

%mymap是一个哈希值。 $mymap{"balloon"}是标量 - 即与密钥%mymap对应的散列"balloon"的值。 @mymap{"balloon"}是对所谓的哈希切片的尝试 - 基本上,您可以使用这些来一次为一堆密钥分配一堆值:@hash{@keys}=@values

所以,如果你想为$mymap{"balloon"}分配一个数组引用,你需要这样的东西:

$mymap{"balloon"}=[1,2,3]

要访问元素,您可以使用->,如下所示:

$mymap{"balloon"}->[0] #equals 1
$mymap{"balloon"}->[1] #equals 2
$mymap{"balloon"}->[2] #equals 3

或者,您可以省略箭头:$mymap{"balloon"}[0]等。