perl - 返回的变量在源代码中没有指示

标签 perl

(我最近决定使用 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/

相关文章:

perl - 如何对数组进行排序,以便某些文件扩展名排序到顶部?

perl - 在 Perl 中写入文件时测试错误处理的最简单方法是什么?

mysql - 是MySQL命令$myconnection->disconnect();在 Perl 中需要

perl - DBI 在获取行时可以推断或获知数字列类型吗?

linux - 在Linux中使用Tk运行Perl程序报错 "1132148 is not a hash"

javascript - 图像 uploader 不适用于 JQuery/ajax

linux - Net::SSH::Perl 不工作但是是最新的

perl - 如何打印行号 10 和 25 之间的行?

macos - readarray 的替代方法,因为它在 mac os x 上不起作用

perl - 无法使用 Cpan 安装 Archive::Zip