在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:我实际上是说第一段代码摘录中的括号,他在其中描述了他想要的结构。。。我同意你关于数组创建的观点。