Как узнать количество элементов в Perl массиве

Задача. В коде Perl программы есть массив @arr (первые три буквы от слова "array"). В этом массиве есть какие-то значения. Нужно узнать сколько в этом массиве содержится элементов.

Есть несколько способов решить эту задачу.

Использовать скалярный контекст

Если использовать массив в скалярном контексте, то это значение как раз и будет количество элементов в массиве:

my $number_of_elements = scalar(@arr);

Пример программы:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print scalar(@arr);

Программа выведет число 3.

Скалярный контекст можно получить не только с помощью scalar(), но и с помощью какой-нибудь арифметической операции, которая не меняет число, например, прибавить/отнять ноль или умножить/разделить на единицу:

my $number1 = @arr + 0;
my $number2 = @arr - 0;
my $number3 = @arr * 1;
my $number4 = @arr / 1;

Использовать переменную с индексом последнего элемента

Другой способ выяснить длину массива — это использовать переменную, которая связана с этим массивом и в котором содержится номер последнего элемента. Если массив называется @arr, то такая переменная будет называться $#arr. Первый элемент в Perl массиве имеет номер 0, так что для того чтобы получить количество элементов, нужно к этой переменной прибавить 1.

my $number_of_elements = $#arr + 1;

Как считаются разные элементы и undef

Совершенно не важно какие значения содержатся в массиве. Там могут быть как простые строки и числа, так и сложные структуры.

Если в массиве содержатся значение undef, то они тоже считаются. Вот пример массива в котором находятся 4 элемента:

my @arr = (1, undef, 3, undef);

Неправильный способ подсчета — использовать length()

Вот пример программы. Программа выводит на экран число 1 и можно неверно предположить что length() примененный к массиву возвращает количество элементов в нем.

▶ Run
#!/usr/bin/perl

my @arr = ('one');

print length(@arr);

Но это неверное предположение. Для того чтобы в этом убедиться можно проверить что для массива my @arr = ('one', 'two', 'three') length()так же вернет 1.

length() примененное к массиву возвращает не количество элементов, а количество цифр в количестве элементов. Если в массиве содержится 9 или меньше элементов, то length(@arr) вернет 1, если в массиве содержится от 10 до 99 элементов, то length(@arr) вернет 2 и так далее.

Связанные темы

Другие статьи

Комментарии