Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中如何使用数组作为哈希值?_Perl_Arrays - Fatal编程技术网

在Perl中如何使用数组作为哈希值?

在Perl中如何使用数组作为哈希值?,perl,arrays,Perl,Arrays,好的,这是我试图创建的整个结构。我需要创建一个可以用作哈希值的匿名数组。这在我的程序中起作用: $result = { count, 2, elementList, [ {name => "John Doe", age => 23}, {name => "Jane Doe", age => 24} ] }; 我试图用这样的代码创建完全相同的东西。这项工作: my @elements = [ {name =

好的,这是我试图创建的整个结构。我需要创建一个可以用作哈希值的匿名数组。这在我的程序中起作用:

$result = {
    count, 2,
    elementList, [
        {name => "John Doe", age => 23},
        {name => "Jane Doe", age => 24}
    ]
};
我试图用这样的代码创建完全相同的东西。这项工作:

my @elements = [
     {name => "John Doe", age => 23},
     {name => "Jane Doe", age => 24}
];

$result = {
    count, 2,
    elementList, @elements
};
但这不起作用:

my @elements;
push(@elements, {name => "John Doe", age => 23});
push(@elements, {name => "Jane Doe", age => 24});

$result = {
    count, 2,
    elementList, @elements
};

您正在为数组分配数组引用(
[]
语法)。作为第一个也是唯一的元素,因为您没有指定任何其他元素

您希望直接在那里分配一个列表,使用括号
()
而不是方括号

查看有关该主题的介绍。

括号错误

实际上,您需要构建如下结构:

my @elements = (
    {name => "John Doe", age => 23},
    {name => "Jane Doe", age => 24}
);
要在循环中执行此操作,您需要修改以下代码:

my @elements;  # same as my @elements = ();
push(@elements, {name => "John Doe", age => 23});
push(@elements, {name => "Jane Doe", age => 24});
原因是方括号构建了对数组的引用。对数组的引用与数组不同


要创建要分配给数组的元素列表,请使用圆括号
()

[]引用空数组。您正在使用一个元素创建数组。只需说:
my@elements以生成空数组。

正如其他人所提到的,您描述的是一种不同寻常的数据结构:一个只有一个元素的数组,它是hashrefs的arrayref。我假设你确实出于某种原因想要这种结构

my @elements = [
    {name => "John Doe", age => 23},
    {name => "Jane Doe", age => 24}
];
相当于

my @elements = [];
push(@{ $elements[0] }, {name => "John Doe", age => 23});
push(@{ $elements[0] }, {name => "Jane Doe", age => 24});
因为您希望将hashref推送到
$elements[0]
中的arrayref,而不是
@elements
数组

但是只有一个元素的数组是不常见的。查看您发布的其他代码,您真正想要的是:

my $elementsRef = [];
push(@$elementsRef, {name => "John Doe", age => 23});
push(@$elementsRef, {name => "Jane Doe", age => 24});
或者这个:

my @elements;
push(@elements, {name => "John Doe", age => 23});
push(@elements, {name => "Jane Doe", age => 24});
然后使用当前使用的
\@elements


其中任何一个都可以。由你决定你喜欢哪一个。我可能会选择第二个版本。

如果代码的其余部分用括号括起来,问题可能就在那里。如果你还需要帮助,就把它带到问题中。括号是多余的。你可以说@array=()来清空一个数组,但你永远不需要“my@array=()”@runrig:我实际上是说第一段代码摘录中的括号,他在其中描述了他想要的结构。。。我同意你关于数组创建的观点。