为什么我的第一个哈希值在Perl中消失了?

时间:2015-05-31 17:21:49

标签: arrays perl hash

为什么哈希在打印输出时会删除第一个值apple:2

use warnings;
use strict;
use Data::Dumper;

my @array = ("apple:2", "pie:4", "cake:2");
my %wordcount;
our $curword;
our $curnum;
foreach (@array) {
    ($curword, $curnum) = split(":",$_);
    $wordcount{$curnum}=$curword;
}
print Dumper (\%wordcount);

2 个答案:

答案 0 :(得分:8)

Perl哈希只能有唯一键,所以

$wordcount{2} = "apple";

稍后被

覆盖
$wordcount{2} = "cake";

答案 1 :(得分:5)

你可能想做的是:

use warnings;
use strict;

use Data::Dumper;

my @array = ("apple:2", "pie:4", "cake:2");
my %wordcount;
for my $entry (@array) {
    my ($word, $num) = split /:/, $entry;
    push @{$wordcount{$num}}, $word;
}

print Dumper (\%wordcount);

这样,%wordcount中的每个条目都将单词计数与多次出现的单词数组相关联(假设表示法中的:n表示计数)。

成为初学者是可以的,但是假设其他人可以读懂你的想法是不行的。

此外,当词汇范围(our)执行时,不要使用全局变量(my)。