【发布时间】:2015-04-16 21:51:49
【问题描述】:
我正在学习 Perl 教程,但对于如何在调用库时遍历数组感到有些困惑
该库应包含一个函数,该函数接受一个数字数组(任意大小)。然后,该函数将计算数字的平均值、所有数字的总和以及一个新的数字数组,该数组由原始输入数字除以 2 组成。然后它将返回一个包含所有数字的新列表这些信息。
脚本文件,应该通过标准输入从用户那里得到一个数字列表,调用库函数并打印返回的数字。
到目前为止,我在主脚本中有这个:
#!/usr/local/bin/perl
require 'test4lib.pl';
my @numbers;
while (<>) {
s/\s+\z//;
last if $_ eq "";
push @numbers, $_;
}
print "My Numbers are: @numbers\n";
number_crunch(@numbers);
print "Total is: $total\n";
print "Average is: $Average\n";
print "Divided by 2 is: @divided_by\n";
还有这个在库函数中:
sub number_crunch {
foreach $number(@_) {
$total = $sum+=$_ for (@_);
$count = $numelements=(@_);
$Average = ($total / $count);
print "Total is: $total\n";
$Average = ($total / $count);
print "Average is: $Average\n";
@divided_by = ();
foreach (@_) {
$new_number = $_ / 2;
push @divided_by, $new_number;
}
}
}
1;
问题是库中的函数只获取数组的第一个数字,我不确定如何遍历数组。任何帮助表示赞赏。
贝基
【问题讨论】:
-
欢迎使用 stackoverflow。 perl 的标准建议是
use strict; use warnings; -
这有很多问题。您遍历所有传递的数字,将当前数字传递给
$number,但从不使用该变量,然后您尝试计算该循环中所有数字的$total,但为此您使用名为$sum的东西,您从未设置过,您为每个数字计算两次$average(因为您仍在循环中)等等......您需要退后一步,在重写之前考虑您的子流程。是的,在你真正知道自己在做什么之前,永远不要在没有strict和warnings的情况下编写 perl 脚本。我什至不会说,但那是我。
标签: perl