我对Perl完全不熟悉,现在我真的陷入了这个(可能非常简单)问题。问题本身是一个简单的输出问题,我在那里得到的结果应该是。这是我写的代码:
sub above_average
{
my $average = &average(@_);
foreach my $thing (@_)
{
if ($thing > $average)
{
print $thing;
}
}
}
my @fred = &above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
运行代码时得到的结果是:
678910@fred is
(Should be 6 7 8 9 10)
它应该看起来像
@fred is 6 7 8 9 10
而不是678910@fred is
。我只是不知道如何修理它,我已经花了好几个小时没有运气了。 最佳答案
你的子程序print
s那些大于平均值的数字,它不return
它们。但是请注意,您只能从一个子例程返回一次,因此我们首先必须收集所有较大的值:
sub above_average {
my $avg = average(@_);
return grep { $_ > $avg } @_;
}
这是表达
sub above_average {
my $avg = average(@_);
my @out;
for my $num (@_) {
push @out, $num if $num > $avg;
}
return @out;
}
提示:不要用前导来调用子例程,这是一个不必要的古老习惯,并且有一些您可能不知道的效果。尽可能避免。
关于linux - Perl:子程序输出显示之前需要,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22680607/