Подсчет количества чисел, превышающих 5 в данном массиве

#arrays #perl

#массивы #perl

Вопрос:

У меня ошибка, в которой говорится, что prototype not terminated at filename.txt line number 113 строка where as с номером 113 принадлежит другой программе, которая успешно запущена.

 sub howmany( 
    my @H = @_;
    my $m = 0;

    foreach $x (@H) {
        if ( $x > 5 ) {
            $m  =1;
        }
        else { 
            $m  =0;
        }
    }
    print "Number of elements greater than 5 is equal to: $m n";
} 
howmany(1,6,9);
 

Комментарии:

1. всегда начинайте с : use strict; use warnings;

2. Совет: $m = 0; ???

3. Совет: howmany следует return ли считать. Это print должно быть сделано вызывающим. Ввод-вывод и вычисления не связаны между собой.

4. если элемент массива больше пяти, он добавит единицу к $ m, в противном случае он ничего не добавит и проверит следующий элемент

5. Это то, что он должен делать, но вы добавляете ноль вместо того, чтобы ничего не добавлять / делать.

Ответ №1:

За sub ключевым словом должно следовать { } not ( ) (если вы определяете простую функцию), вот почему ошибка

 prototype not terminated
 

После этого всегда начинайте с : use strict; use warnings;

Поместите это и отладьте свой скрипт, там больше ошибок.

И последнее, но не менее важное: сделайте правильный отступ в коде, используя редактор с подсветкой синтаксиса, вы сэкономите много времени на отладку

Ответ №2:

Ошибка связана с круглыми скобками. Никогда не делайте $ m = 0; Поскольку вы фактически загружаете процессор впустую. Конечно, это не будет видно на такой маленькой функции, но…

 sub howmany {
    my $m = 0;
    foreach (@_) {
        $m   if ($_ > 5);
    }
    print "Number of elements greater than 5 is equal to: $m n";
} 
howmany(1,6,9);