我有一個數組散列。我試圖做到以下幾點:當我通過散列鍵循環時,我想將散列值(在這種情況下是數組)傳遞給子例程。如何將數組散列的值傳遞給子例程?
一旦我在子程序中,我想對數組做一些計算,包括取數組中數值的平均值。最後根據計算返回一個值。
這裏是什麼,我有一個最小的表示:
#!/usr/bin/perl
use warnings; use strict;
use List::Util qw(sum);
%data_set = (
'node1' => ['1', '4', '5', '2'],
'node2' => ['3', '2', '4', '12'],
'node3' => ['5', '2', '3', '6'],
);
foreach my $key (keys %data_set) {
foreach (@{$data_set{$key}}) {
my @array = split; # it's not letting me
calculate(\@array); ### I'm getting the error here!!
}
}
sub calculate{
my @array = @{$_};
my $average = mean(\@array);
# do some more calculations
return; # return something
}
# sum returns the summation of all elements in the array
# dividing by @_ (which in scalar content gives the # of elements) returns
# the average
sub mean{
return sum(@_)/@_;
}
快速澄清:在第一次迭代node1
,我想數組'1', '4', '5', '2'
傳遞到子程序。
我認爲,爲我的目的,這可能比將數組散列引用傳遞給每個子例程更有效率。你們有什麼感想?無論如何,你們能幫我解決這個問題嗎?任何建議表示讚賞。謝謝
沒關係啊。如果我想將'@ array'傳遞給'mean'子例程,它是否仍然是:'mean(\ @ array)'?最後,我是否需要對'mean'子例程進行任何更改? – cooldood3490 2013-03-22 03:22:48
'mean(\ @ array)'很好,但你應該再看一下'mean' - 這裏有一些奇怪的事情發生。 – Jared 2013-03-22 03:26:12
好吧,我現在明白了。謝謝 – cooldood3490 2013-03-22 03:32:03