FAQ 4.59 How can I know how many entries are in a hash?


PerlFAQ Server

This is an excerpt from the latest version perlfaq4.pod, which
comes with the standard Perl distribution. These postings aim to
reduce the number of repeated questions as well as allow the community
to review and update the answers. The latest version of the complete
perlfaq is at http://faq.perl.org .


4.59: How can I know how many entries are in a hash?

(contributed by brian d foy)

This is very similar to "How do I process an entire hash?", also in
perlfaq4, but a bit simpler in the common cases.

You can use the "keys()" built-in function in scalar context to find out
have many entries you have in a hash:

my $key_count = keys %hash; # must be scalar context!

If you want to find out how many entries have a defined value, that's a
bit different. You have to check each value. A "grep" is handy:

my $defined_value_count = grep { defined } values %hash;

You can use that same structure to count the entries any way that you
like. If you want the count of the keys with vowels in them, you just
test for that instead:

my $vowel_count = grep { /[aeiou]/ } keys %hash;

The "grep" in scalar context returns the count. If you want the list of
matching items, just use it in list context instead:

my @defined_values = grep { defined } values %hash;

The "keys()" function also resets the iterator, which means that you may
see strange results if you use this between uses of other hash operators
such as "each()".


The perlfaq-workers, a group of volunteers, maintain the perlfaq. They
are not necessarily experts in every domain where Perl might show up,
so please include as much information as possible and relevant in any
corrections. The perlfaq-workers also don't have access to every
operating system or platform, so please include relevant details for
corrections to examples that do not work on particular platforms.
Working code is greatly appreciated.

If you'd like to help maintain the perlfaq, see the details in


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question