如何在perl中获得列表的哈希值
抱歉这个语法问题。我找不到解决方案。 我想在 perl 中有一个散列数组,每个散列都有字符串和数组。 我正在尝试编写以下代码:
use strict;
my @arr = (
{ name => "aaa" , values => ("a1","a2") },
{ name => "bbb" , values => ("b1","b2","b3") }
);
foreach $a (@arr) {
my @cur_values = @{$a->{values}};
print("values of $a->{name} = @cur_values\n");
};
但这对我不起作用。我收到编译错误和警告(使用 perl -w)
a.pl 第 2 行的匿名哈希中的元素数量为奇数。 当 a.pl 第 9 行使用“严格引用”时,无法使用字符串(“a1”)作为 ARRAY 引用。
Sorry for this syntax question. I fail to find the solution.
I want to have an array of hashs in perl, each of them has string and array.
I'm trying to write the following code:
use strict;
my @arr = (
{ name => "aaa" , values => ("a1","a2") },
{ name => "bbb" , values => ("b1","b2","b3") }
);
foreach $a (@arr) {
my @cur_values = @{$a->{values}};
print("values of $a->{name} = @cur_values\n");
};
But this does not work for me. I get compilation error and warning (using perl -w)
Odd number of elements in anonymous hash at a.pl line 2.
Can't use string ("a1") as an ARRAY ref while "strict refs" in use at a.pl line 9.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你不能。 Perl 中的数组仅包含标量。不过,
{}
将创建一个哈希引用,它是一个标量,没有问题。但这: 的
意思与:
您需要一个 arrayref (这是一个标量),而不是值的列表。
You can't. Arrays only contain scalars in Perl. However,
{}
will create a hashref, which is a scalar and is fine.But this:
means the same as:
You want an arrayref (which is a scalar), not a list for the value.
尝试以下操作:
在第 3 行和第 4 行定义数组时,您只需使用方括号即可。
Try the following:
You just needed to use square brackets when defining your array on lines 3 and 4.
列表(用
()
创建)将被展平。 Arrayrefs ([]
) 不会。有关更多信息,请参阅
perldoc perlreftut
。另外,避免使用
$a
和$b
作为变量名称,因为它们专门用于sort
块内。Lists ( made with
()
) will get flattened. Arrayrefs ([]
) won't.See
perldoc perlreftut
for more.Also, avoid using
$a
and$b
as variable names as they are intended for special use insidesort
blocks.