返回变量,源代码中没有指示

时间:2014-12-26 06:18:31

标签: perl

(我最近决定使用O'Reilly Learning Perl 第6版学习Perl。)

目标:列出另一个列表中的数字列表,其中只包含大于源数组平均值的数字。但是,

这是由本书提供的。

my @fred = above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";

my @barney = above_average(100, 1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";

这是我的回复。

sub total {
    #computes total of array
}
sub average {
    #computers average from
    #array and length of said array
}

sub above_average {
    $average = average(@_);
    my @ab_avr;
    foreach $num (@_) {
        if ($num > $average) {
            push @ab_avr, $num;
        }
    }
    @ab_avr;
}

第一个样本似乎正在工作,但是第二个样本输出100,这是正确的,但我不明白为什么要返回100个。我传入above_average()的数组只有1到10的数字,附加参数为100.调整默认变量$ _,从不使用,为什么显示100?

感谢。

1 个答案:

答案 0 :(得分:2)

Lists and arrays are subtly different。您不能将数组传递给子例程;所有子程序都采用列表和返回列表;传递的整个列表在子例程中可用,就好像它是数组@_

在这种情况下,您传递100, 1..10,因此@_实际上将包含100,1,2,3,...,10。

这在您的代码中实际上不是问题,但您应该尽可能地尝试使用词法,例如: my $average =foreach my $num,并使用严格和警告。