for hash in hash table只打印最后一个值

时间:2014-06-24 06:19:07

标签: perl

请建议。

for my $record (@item) {
    for my $int (@$record){
       #       DEBUG( "DEBUG:: $record and $int");
             my %data = ( $record , $int );
                }
        }
}

记录就像

abc ,china
abc ,japan
abc , italy
abc , singapore

print Dumper %data;
output :
abc , singapore

现在问题是当我转储输出时它显示我在哈希表中的最后一个记录条目。可能是因为唯一键。

请建议。

1 个答案:

答案 0 :(得分:2)

两个问题:

  1. 您正在循环的每次迭代中重新创建哈希。正确的方法是

    my %data;
    for my $record (@item) {
        for my $int (@$record){
            $data{$record} = $int;
        }
    }
    
  2. 哈希键必须是唯一的。像

    这样的哈希是不可能的
    ( abc => 'china',
      abc => 'japan' )
    

    但是,您可以使用数组哈希。只需用

    分配给它
    push @{ $data{$record} }, $int;
    

    它将创建以下结构:

    ( abc => [ 'china', 'japan', 'italy', 'singapore' ] )