如果有人可以告诉我我的错误,我会很高兴的:
my %mymap;
@mymap{"balloon"} = {1,2,3};
print $mymap{"balloon"}[0] . "\n";
答案 0 :(得分:6)
$mymap{'balloon'}
是哈希而不是数组。表达式{1,2,3}
创建一个哈希:
{
'1' => 2,
'3' => undef
}
您已将其分配到%mymap
的片段,对应于列键:('balloon')
。由于键列表是1项且值列表是一项,因此您执行的操作与
$mymap{'balloon'} = { 1 => 2, 3 => undef };
如果您使用过strict
和warnings
,那么就会让您知道错误。我得到了:
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]
等。