繁体   English   中英

Perl:子程序输出显示之前需要

[英]Perl: Subroutine Output Showing Before Needed

我对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那些大于平均值的数字,它不会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;
}

提示:不要以&开头来调用子例程,这是不必要的古老习惯,并且会产生一些您可能不知道的效果。 尽可能避免使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM