2012-12-03 10 views
6

'daki değerlerin eklenmesi Oluşturduğum bir hash değerlerini eklemek istiyorum. Bunu çalıştırdığınızdaBir hash (Perl)

my $value_count; 
foreach my $key (@keys) { 
    $value_count = sum($words{key}, $value_count); 
} 

Ancak burada yanlış gidiyorum nerede gerçekten emin değilim

Undefined subroutine &main::sum called at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174. 

olsun. Perl için yeniyim.

DÜZENLEME: Sadece + operatörü ile çalıştı ama ben hatayı olsun

Use of uninitialized value in addition (+) at C:/Users/Clayton/workspace/main/Main.pl line 54, <$filehandle1> line 174. 

Hemen hemen benim karma olduğunu Yani Anahtar Değer kedi 2 köpek 4 sıçan 1

gibi Tüm değerleri toplamaya çalışıyorum, böylece ortalamaları alabiliyorum.

DÜZENLEME 2: Gerçek düzeltme, $ value_count = 0'mı yapmam gereken yorumlar arasındadır. Bu her şeyi düzeltti. Hepinize teşekkür ederim. Bunun çözülmesi gereken önemli bir konu olduğunu düşünüyorum ve bunun bir başkası için faydalı olabileceğini düşünüyorum.

+1

Eğer tamir ettin sen bütün anahtarları üzerinde toplamak istemiyorsanız, bir karma dilim kullanmak yazım hatası "$ key" yerine "key" ile mi? – Tim

+1

'$' sigal kullandığınızdan emin olun. Senin örneginde degilsin. – jmcneirney

+0

@Tim N aww darn Bir yazım hatası var ..... –

cevap

20

sum işlevini kullanmak için List::Util paketine ihtiyacınız vardır.

$value_count = $value_count + $words{$key}; 
# or $value_count += $words{$key}; 

Aslında, sum kullanıp döngü önlemek olabilir: Eğer + operatörünü kullanabilirsiniz Fakat bu, bu durumda gerekli değildir.

use List::Util 'sum'; 
my $value_count = sum values %words; 

values fonksiyonu bir liste olarak bir karma değerlerini döndürür ve sum toplamları o liste: Bu kullanmalısınız çözümdür. Eğer değiştirirseniz

use List::Util 'sum'; 
my $value_count = sum @words{@keys}; 
+1

"Değerleri" kullanmanın muhtemelen bir karma dilimden daha kolay olduğunu düşünüyorum: "perl -MList :: Util = sum -le '% h = (bir => 1, on => 10, six => 6); baskı toplamı (değerler% h) '' – Ashley

+0

@Ashley Evet, ancak yalnızca tüm değerleri toplamak istiyorsanız çalışır. – Tim

+0

OP'de olduğu gibi: P – Ashley

3

Sen iyi olmalı:

$value_count = sum($words{key}, $value_count); 

olarak:

$value_count += $words{key};