簡體   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