Проблема здесь:
my $numberOfhellos = @ARGV;
Вы присваиваете массив скалярной переменной.Это дает вам количество элементов в массиве.Поскольку вы передаете в скрипт один аргумент (3
), т. Е.
@ARGV = ("3")
, это устанавливает $numberOfHellos
в 1
.
Исправление заключается в установке $numberOfhellos
первому элементу @ARGV
, например:
my $numberOfhellos = $ARGV[0];
или, альтернативно,
my ($numberOfhellos) = @ARGV;
, который (из-за круглых скобок) выполняет присвоение списка, в котором хранится первый элемент@ARGV
в первом элементе списка с левой стороны, т.е. он также заканчивает настройкой $numberOfhellos = $ARGV[0]
.
Также вам это не нужно:
chomp($numberOfhellos);
chomp
используется для удаления завершающего символа новой строки из строки, возвращаемой функцией readline
.Здесь нет новых строк.
Тем не менее, более идиоматический способ написать цикл подсчета в Perl - это использовать for
(и диапазон) вместо while
:
my $numberOfHellos = $ARGV[0];
for my $count (1 .. $numberOfHellos) {
print "Hello number $count\n";
}