(我最近决定使用 O'Reilly 学习 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?
谢谢。
最佳答案
Lists and arrays are subtly different 。您不能将数组传递给子例程;所有子例程都采用列表并返回列表;传递的整个列表在子例程中可用,就像数组 @_
一样。
在本例中,您传递的是 100, 1..10
,因此 @_
实际上将包含 100, 1, 2, 3, ..., 10.
这实际上并不是代码中的问题,但您应该尽可能尝试始终使用词汇,例如my $average =
、foreach my $num
,并使用严格和警告。
关于perl - 返回的变量在源代码中没有指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27653511/