好的,所以这是我正在尝试创建的整个结构。我需要创建一个可以用作哈希值的匿名数组。这适用于我的程序:
$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
};
答案 0 :(得分:7)
正如其他人所提到的,你正在描述一个不寻常的数据结构:一个只有一个元素的数组,它是一个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});
因为你想将hashrefs推送到$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
的{{1}}。
其中任何一个都可以。由您来决定您喜欢哪一个。我可能会选择第二个版本。
答案 1 :(得分:5)
答案 2 :(得分:3)
错误的括号。
你实际上需要建立一个这样的结构:
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});
原因是方括号构建了对数组的引用。对数组的引用与数组不同。
要制作要分配给数组的元素列表,请使用圆括号()
。
答案 3 :(得分:3)
[]引用一个空数组。您正在创建一个包含一个元素的数组。只需说:my @elements;
制作一个空数组。