2012-01-15 30 views
0

这可能是我的一个简单的忽略(或比我的技能更先进的东西)。我试图通过从文件中读取输入来动态填充2d关联数组。Perl动态生成多维关联数组

my @data; 
while (<FILE>) { 
    chomp; 

    my $ID,$COUNT; 
    print "READ: " . $_ . "\n"; #Debug 1 

    ($ID,$COUNT,undef,undef,undef) = split /\,/; 
    print "DATA: " . $ID . "," . $COUNT . "\n"; # Debug 2 

    $data{$ID}{"count"} = $COUNT; 
    #push @{$data{$ID}{"count"}}, $COUNT; 

       print $data{$ID}{"count"} . "\n"; # Debug 3 
} 

第一个打印(调试1)将打印类似于des313,3 ,,,的行。

第二打印(调试2)将打印线DATA:des313,3

第三打印(调试3)将打印一个空行。

这个问题似乎是我试图将数据插入关联数组的方式。我已经尝试了直接插入和推式方法,但没有结果。我已经用PHP做了这个,但我认为我在Perl中忽略了这一点。我在HASHES的HASHES部分查看了perldoc perldsc页面,但是我没有看到它谈论它们的动态生成。任何建议都会很棒!

+0

尽管可以提高你的代码工作正常,我因为它的立场。第三个调试行正确打印存储的$ COUNT值。请再次检查此代码,并告诉我们您会得到什么结果以及您正在使用的数据文件的内容。 – Borodin 2012-01-15 04:40:44

+0

如果您从使用术语“关联数组”的源学习Perl,那么它几乎肯定是过时的。请找一些不超过15岁的东西。 – 2012-01-15 16:29:21

回答

5

指定散列的方式你应该工作得很好。你正在宣布你的变量不当。您的关联数组在Perl中称为哈希,并且前缀为%印记,所以您应该在while循环之前写入my %data。在循环中,my运营商需要parens才能应用于列表,因此它应该是my ($ID, $COUNT);

这个小例子,正常工作:

use warnings; # place these lines at the top of all of your programs 
use strict; # they will catch many errors for you 

my %data; # hash variable 
while (<DATA>) { 
    chomp; 
    my ($id, $count) = split /,/; # simplify the split 

    $data{$id}{count} = $count; # build your hash 
} 

print "got: $data{des313}{count}\n"; # prints "got: 3" 

__DATA__ 
des313,3 
+0

以您的解决方案,它工作得很好。但是,如果我在我的代码中进行更改,甚至在修复一些问题后也不会。 – jinanwow 2012-01-15 04:40:50

+0

在做了一些故障排除后发现发生了什么事。我的打印语句有打印$ data {$ ID} {count}。 “\ n”(\ n之前的额外空格)。我删除了额外的空间,我得到了我想要的结果。不确定额外的空间究竟是如何导致没有输出,但现在它工作。谢谢! – jinanwow 2012-01-15 04:41:19