Защо първата ми хеш стойност изчезва в Perl?

Защо хешът премахва първата стойност 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);

person Mr.red    schedule 31.05.2015    source източник


Отговори (2)


Хешът на Perl може да има само уникални ключове, така че

$wordcount{2} = "apple";

по-късно се презаписва от

$wordcount{2} = "cake";
person mpapec    schedule 31.05.2015

Това, което вероятно сте искали да направите, е:

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) са подходящи.

person Sinan Ünür    schedule 31.05.2015