Я беру учебник Perl и несколько озадачен о том, как перебрать массив при вызове библиотекиПеребор массива в Perl
Библиотека должна содержать функцию, которая принимает в массив чисел (произвольных размер). Затем функция вычисляет среднее число чисел, общее количество всех добавленных чисел и новый массив чисел, который состоит из исходных номеров ввода, каждый из которых разделен на 2. Затем он будет возвращать новый список со всеми эта информация.
Файл сценария должен получить список номеров от пользователя через STDIN, вызвать библиотечную функцию и распечатать возвращенные номера.
До сих пор у меня есть это в основном скрипте:
#!/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 является использование строгого; предупреждения использования; ' – KeepCalmAndCarryOn
В этом есть много ошибок. Вы перебираете все пройденные числа, передавая текущий в '$ number', но никогда не используете эту переменную, затем пытаетесь вычислить' $ total' всех чисел в этом цикле, но для этого вы используете что-то, называемое '$ sum', которое вы никогда не устанавливаете, вы вычисляете '$ average' дважды за каждое число (так как вы все еще в цикле) и т. д. ... Вам нужно сделать шаг назад и подумать о потоке вашего суба, прежде чем переписывать его. И да, никогда не пишите perl-скрипт без 'strict' и' warnings', пока вы действительно не поймете, что делаете. Я бы сказал, даже не тогда, но это я. – DeVadder