在Perl5.10中,如何创建和访问具有标量键值为数组的散列?
#Doing this does not work properly.
%someHash= ("0xfff" => ('Blue', 'Red', 'Yellow'));
@arr = @fileContents{"0xfff"};
print @arr;当我打印数组时,打印的唯一内容是" array ('randmemAddr')“。当我在@arr上执行foreach循环时,只打印第一个元素。然后,我得出结论,我没有在散列中正确地存储数组。
发布于 2009-07-08 17:19:44
我最初的答案发布了工作代码,但并没有真正解释你的问题。这是一个扩展,以纠正这一点。您的示例有两个问题。首先,您在进行引用时遇到了问题。您需要使用[ ]而不是标准的圆括号来创建引用(对匿名数组)。其次,当您试图获取引用时,您遗漏了一组括号。您希望将引用本身放在@{ }中,以便获取整个数组。(另外,这可能是一个拼写错误:在filecontents之前没有$。)
这里的代码基本上来自perldoc perldsc。我强烈推荐它。如果您不熟悉Perl中的引用,perldoc perlreftut也是非常有用的。这两个教程都讨论了如何在各种情况下创建和获取参考资料。最后,您可以在PerlMonks上的帖子中找到一个很好的参考小抄。
#!/usr/bin/env perl
use strict;
use warnings;
my %HoA = (
flinstones => [ qw/fred barney/ ],
jetsons => [ qw/george jane elroy/ ],
);
for my $family (keys %HoA) {
print "Members of the \u$family:\n";
print "\t @{ $HoA{$family} }\n";
}发布于 2009-07-08 17:20:52
您需要更明确地存储对数组的引用,然后取消对它的引用。
试试这个:
#Doing this doeswork properly.
%someHash= ("0xfff" => ['Blue', 'Red', 'Yellow']);
@arr = @{$fileContents{"0xfff"}};
print @arr;请注意,在使用它时,花括号变成了括号和转换。
发布于 2009-07-08 17:52:44
我发现使用Data::Dumper模块要容易得多。在您的perl发行版中出现这种情况的可能性非常高。它允许您快速查看您的数据结构。
在您的情况下,它将是:
use Data::Dumper;
my %someHash= ("0xfff" => ('Blue', 'Red', 'Yellow'));
print Dumper \%someHash;这将输出:
$VAR1 = {
'Red' => 'Yellow',
'0xfff' => 'Blue'
};当然,要修复它,您需要将数组存储为引用:
use Data::Dumper;
my %someHash= ("0xfff" => [qw(Blue Red Yellow)]);
print Dumper \%someHash;这将产生以下结果:
$VAR1 = {
'0xfff' => [
'Blue',
'Red',
'Yellow'
]
};底线是Data::Dumper是你最好的朋友
https://stackoverflow.com/questions/1099371
复制相似问题