在Perl Hash中推送键/值对列表

时间:2016-03-29 15:50:07

标签: perl hash

我正在尝试将键/值对列表“推送”到perl哈希中,如下所示。我认为它可以像将数组分配给散列时分配键值对一样工作。 @targets包含每个元素的制表符分隔字符串。然而,对于map循环的每次迭代,散列都被覆盖,最后我在散列中只有一个键值对,它对应于@targets的最后一个元素。我试图避免通常的$ID_Gene{$key}=$value类型分配。

如何将列表作为键值对推送到哈希?

或者,有什么方法可以构建一个匿名哈希,然后将该哈希值推送到原始哈希值?如:%ID_Gene = (%ID_Gene, %AnonyHash);

my %ID_Gene;
map{ %ID_Gene= (split /\t/,$_) ;
}@targets;

1 个答案:

答案 0 :(得分:4)

你几乎就在那里,你只是把作业放在了错误的地方,所以你每次添加一个项目时最终都会吹走整个哈希。作为一般规则,在map中做副作用的事情通常没有意义。你可以这样做:

my %ID_Gene = map { split /\t/, $_ } @targets;

如果您已经在%ID_Gene中有一些内容并且想添加它,则可以

%ID_Gene = (%ID_Gene, map { split /\t/, $_ } @targets);

或者如果你认为在一行中发生太多事情:

my %to_add = map { split /\t/, $_ } @targets;
%ID_Gene = (%ID_Gene, %to_add);