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

3
为什么当我输出哈希表时,哈希表会移除第一个值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个回答

8
Perl哈希表只能有唯一的键,因此:
$wordcount{2} = "apple";

被后来的内容覆盖

$wordcount{2} = "cake";

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 表示计数)。

成为初学者是可以理解的,但假定他人能读懂你的想法是不合适的。

此外,在词法作用域下使用 my 可行时,请勿使用全局变量 (our)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接