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

Задача. В программе на языке программирования Perl есть хеш. Нужно выяснить сколько пар значений в нем находится.

Например, для вот такого хеша нужно получить значение 1:

my %h = (
    a => 'AAA',
);

А для такого хеша нужно получить значение 3:

my %h = (
    a => 'AAA',
    b => 'BBB',
    c => 'CCC',
);

Решение

Стандартное решение этой задачи — это сначала получить все ключи хеша с помощью keys, а потом посчитать количество ключей с помощью скалярного контекста. Вот скрипт целиком:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 'AAA',
    b => 'BBB',
);

my $number = scalar keys %h;

print $number;

Скрипт выведет на экран число 2. scalar keys %h это то же самое что и scalar(keys(%h)).

Это решение работает на всех версиях Perl. И чаще всего именно это решение является лучшим.

Решение в новых версиях Perl

Начиная с версии Perl 5.26 количество пар значений в хеше можно получить просто с помощью scalar %h.

И благодаря этому появилась консистентность между тем как получить количество элементов в массиве scalar @arr и как получить количество пар значений в хеше scalar %h. Очень жаль что такое поведение не было создано изначально.

Если использовать scalar %h в Perl раньше чем 5.26, то результат этой операции будет странная дробь вида 1/8. (объяснение что означает эта дробь). Из-за этого более надежным вариантом для выяснение количества пар в хеше все еще остается вариант scalar keys %h.

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

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

Комментарии