8

作成したハッシュの値を合計したい。

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

しかし、これを実行すると

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

ここでどこが間違っているのかよくわかりません。私はPerlが初めてです。

編集: + 演算子だけを使用してみましたが、エラーが発生します

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

ほとんどの私のハッシュはキー値猫 2 犬 4 ラット 1 のようなものです。

だから私は平均をとることができるようにすべての値を合計しようとしています.

編集 2: 実際の修正は、$value_count = 0 にするために必要なコメントにあります。これですべてが修正されました。皆さん、ありがとうございました。これは解決すべき重要な問題だと思いますし、他の誰かにとって役に立つかもしれないと思うので、このままにしておきます。

4

2 に答える 2

22

この機能を使用するには、パッケージsumが必要です。ただし、演​​算子List::Utilを使用できるため、この場合は必要ありません。+

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

sum実際、ループを使用して回避することができます。これは、使用する必要があるソリューションです。

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

このvalues関数は、ハッシュの値をリストとして返し、sumそのリストを合計します。すべてのキーを合計したくない場合は、ハッシュ スライスを使用します。

use List::Util 'sum';
my $value_count = sum @words{@keys};
于 2012-12-03T21:46:44.273 に答える
4

次のように置き換えれば問題ありません。

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

と:

$value_count += $words{key};
于 2012-12-03T21:48:24.823 に答える