浮動小数点数の配列があります: (.25, .45, .15, .27)。配列要素の数で除算するのではなく、各要素を互いに乗算したいと思います。
foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;
これにより、値 0 が生成されます。構文が正しいかどうかわかりません。
浮動小数点数の配列があります: (.25, .45, .15, .27)。配列要素の数で除算するのではなく、各要素を互いに乗算したいと思います。
foreach my $element (@array)
{
my $score = $score * $element;
}
$score = $score/$numofelements;
これにより、値 0 が生成されます。構文が正しいかどうかわかりません。
List::Util
ルートもあります。
use List::Util qw(reduce);
my @array = (.25, .45, .15, .27);
my $mult = reduce { $a * $b } 1, @array;
my $score = $mult / @array;
$a
およびに関する警告が表示された場合は$b
、Perl monks に関するスレッドで、それらを黙らせる方法を説明しています。
構文は正しいですが$score
、ループのたびに変数を初期化しているため、反復ごとに変数が 0 に設定されています。ループの外側に移動するだけで機能します。
my $score = 1 #Need to initialize to 1 for multiplying
foreach my $element (@array) {
$score *= $element;
}
$score = $score/$numofelements; #Assuming $numofelements is set already
遅い答えですが、もう少しPerlっぽいかもしれません:
my @array = (3, 5, 4, 7);
my $score = 1;
$score *= $_ for @array;
print ($score / @array), "\n";
$numelements
value が配列の長さを格納するという保証がないため、おそらく使用しないことが最善であることに注意してください。スカラーコンテキストで使用するだけ@array
で、配列の長さを無料で取得できます。