您的數組分配正在吃掉所有參數。
例如,在下文中,$foo
和$bar
將始終是未定義的,並@array
將包含4個元素:
my (@array, $foo, $bar) = (1,2,3,4);
這裏有兩個可能的解決方案:
1)把標量第一和那麼你的陣列:
sub mean {
my ($chan1, $chan2, $chan3, $chan4, @values) = @_;
print $chan1, $chan2, $chan3, $chan4;
my $ave_value = sum(@values[$chan1, $chan2, $chan3, $chan4])/@values;
}
# Calling method:
mean($subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3], @datachunk)
2)或者,您可以通過引用傳遞數組:
sub mean {
my ($arrayref, $chan1, $chan2, $chan3, $chan4) = @_;
print $chan1, $chan2, $chan3, $chan4;
my $ave_value = sum(@{$arrayref}[$chan1, $chan2, $chan3, $chan4])/@$arrayref;
}
# Calling method:
mean(\@datachunk, $subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3])
但是,最緊密的解決方案是重新設置您的代碼。所有你想要的是一個列表的平均值。因此,直接傳遞一個列表而不是索引值的數組。
sub mean {
return @_ ? sum(@_)/@_ : die "Mean of 0 numbers is undefined";
}
# Calling method:
mean(@datachunk[@subchannel[0..3]])
'undef'更有意義大於零。死亡更是如此。 – ikegami
鑑於OP正在將數據推入數組中,我可能傾向於使用'()'。然而,重要的是他只是以他所選擇的某種有意識的方式來處理它。在示例代碼中包含一個顯式的die會傳達最好的結果。 – Miller
我不同意從預期返回標量的函數返回空列表。它有時導致事情失敗。 – ikegami