perl数组在地图错误中哈希,因为它表示无法使用id作为严格的refs正在使用中

时间:2016-04-08 14:43:11

标签: perl

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

my @extensiveArray = ((
    id => 1,
    name => 'Bob',
    ),
    (
    id => 2,
    name => 'Barley',
    ),
    (
    id => 3,
name => 'Marley',
)
);


my %hashRef = map { $_->{id} => { $_->{name} } } @extensiveArray;

这段代码出了什么问题,它给了我错误“不能使用字符串{id}作为HASH参考,而'严格参考'在使用中”

1 个答案:

答案 0 :(得分:4)

您需要在@extensiveArray内使用哈希引用。你现在拥有的是一个单一的清单。 Perl不支持嵌套列表。

my @extensiveArray = (
    {
        id   => 1,
        name => 'Bob',
    },
    {
        id   => 2,
        name => 'Barley',
    },
    {
        id   => 3,
        name => 'Marley',
    }
);

执行此操作后,由于{},您将收到错误匿名哈希值奇数个元素

                                #    here    #
my %hashRef = map { $_->{id} => { $_->{name} } } @extensiveArray;

如果要从map返回键/值对,只需返回一个平面列表。这真的是哈希。

my %hashRef = map { $_->{id} => $_->{name} } @extensiveArray;

您应该查看perlreftut以及其他相关网页。