Acme::CPANModules::HashUtilities - Modules that manipulate hashes


This document describes version 0.002 of Acme::CPANModules::HashUtilities (from Perl distribution Acme-CPANModules-HashUtilities), released on 2020-03-01.


Modules that manipulate hashes.

Most of the time, you don't need modules to manipulate hashes; Perl's built-in facilities suffice. The modules below, however, are sometimes convenient. This list is organized by task.

Creating an alias to another variable

Hash::Util's hv_store allows you to store an alias to a variable in a hash instead of copying the value. This means, if you set a hash value, it will instead set the value of the aliased variable instead. Copying from Hash::Util's documentation:

 my $sv = 0;
 hv_store(%hash,$key,$sv) or die "Failed to alias!";
 $hash{$key} = 1;
 print $sv; # prints 1

Getting internal information

Aside from creating restricted hash, Hash::Util also provides routines to get information about hash internals, e.g. hash_seed(), hash_value(), bucket_info(), bucket_stats(), etc.


Merging hashes is usually as simple as:

 my %merged = (%hash1, %hash2, %hash3);

but sometimes you want different merging behavior, particularly in case where the same key is found in more than one hash. See the various hash merging modules:




Providing default value for non-existing keys


Restricting keys

Perl through Hash::Util (a core module) allows you to restrict what keys can be set in a hash. This can be used to protect against typos and for simple validation. (For more complex validation, e.g. allowing patterns of valid keys and/or rejecting patterns of invalid keys, you can use the tie mechanism.)

Reversing (inverting)

Reversing a hash (where keys become values and values become keys) can be done using the builtin's reverse (which actually just reverse a list):

 %hash = (a=>1, b=>2);
 %reverse = reverse %hash; # => (2=>"b", 1=>"a")

Since the new keys can contain duplicates, this can "destroy" some old keys:

 %hash = (a=>1, b=>1);
 %reverse = reverse %hash; # => sometimes (1=>"b"), sometimes (1=>"a")

Hash::MoreUtil's safe_reverse allows you to specify a coderef that can decide whether to ignore overwriting, croak, or whatever else.

Slicing (creating subset)

Hash::MoreUtils's slice_* functions.




The tie mechanism, although relatively slow, allows you to create various kinds of "magical" hash that does things whenever you get or set keys.



What are ways to use this module?

Aside from reading it, you can install all the listed modules using cpanmodules:

    % cpanmodules ls-entries HashUtilities | cpanm -n

or Acme::CM::Get:

    % perl -MAcme::CM::Get=HashUtilities -E'say $_->{module} for @{ $LIST->{entries} }' | cpanm -n

This module also helps lcpan produce a more meaningful result for lcpan related-mods when it comes to finding related modules for the modules listed in this Acme::CPANModules module.


Please visit the project's homepage at


Source repository is at


Please report any bugs or feature requests on the bugtracker website

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.


Acme::CPANModules - about the Acme::CPANModules namespace

cpanmodules - CLI tool to let you browse/view the lists


perlancar <>


This software is copyright (c) 2020 by

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.