首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建和访问具有标量键值为数组的Perl散列?

如何创建和访问具有标量键值为数组的Perl散列?
EN

Stack Overflow用户
提问于 2009-07-08 17:11:28
回答 4查看 1.6K关注 0票数 1

在Perl5.10中,如何创建和访问具有标量键值为数组的散列?

代码语言:javascript
复制
#Doing this does not work properly.
%someHash= ("0xfff" => ('Blue', 'Red', 'Yellow'));
@arr = @fileContents{"0xfff"};
print @arr;

当我打印数组时,打印的唯一内容是" array ('randmemAddr')“。当我在@arr上执行foreach循环时,只打印第一个元素。然后,我得出结论,我没有在散列中正确地存储数组。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-08 17:19:44

我最初的答案发布了工作代码,但并没有真正解释你的问题。这是一个扩展,以纠正这一点。您的示例有两个问题。首先,您在进行引用时遇到了问题。您需要使用[ ]而不是标准的圆括号来创建引用(对匿名数组)。其次,当您试图获取引用时,您遗漏了一组括号。您希望将引用本身放在@{ }中,以便获取整个数组。(另外,这可能是一个拼写错误:在filecontents之前没有$。)

这里的代码基本上来自perldoc perldsc。我强烈推荐它。如果您不熟悉Perl中的引用,perldoc perlreftut也是非常有用的。这两个教程都讨论了如何在各种情况下创建和获取参考资料。最后,您可以在PerlMonks上的帖子中找到一个很好的参考小抄。

代码语言:javascript
复制
#!/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";
}
票数 12
EN

Stack Overflow用户

发布于 2009-07-08 17:20:52

您需要更明确地存储对数组的引用,然后取消对它的引用。

试试这个:

代码语言:javascript
复制
#Doing this doeswork properly.
%someHash= ("0xfff" => ['Blue', 'Red', 'Yellow']);
@arr = @{$fileContents{"0xfff"}};
print @arr;

请注意,在使用它时,花括号变成了括号和转换。

票数 4
EN

Stack Overflow用户

发布于 2009-07-08 17:52:44

我发现使用Data::Dumper模块要容易得多。在您的perl发行版中出现这种情况的可能性非常高。它允许您快速查看您的数据结构。

在您的情况下,它将是:

代码语言:javascript
复制
use Data::Dumper;
my %someHash= ("0xfff" => ('Blue', 'Red', 'Yellow'));
print Dumper \%someHash;

这将输出:

代码语言:javascript
复制
$VAR1 = {
    'Red' => 'Yellow',
    '0xfff' => 'Blue'
};

当然,要修复它,您需要将数组存储为引用:

代码语言:javascript
复制
use Data::Dumper;
my %someHash= ("0xfff" => [qw(Blue Red Yellow)]);
print Dumper \%someHash;

这将产生以下结果:

代码语言:javascript
复制
$VAR1 = {
            '0xfff' => [
                           'Blue',
                           'Red',
                           'Yellow'
                       ]
        };

底线是Data::Dumper是你最好的朋友

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1099371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档