NAME
Acme::CPANModules::HashUtilities - Modules that manipulate hashes
VERSION
This document describes version 0.002 of Acme::CPANModules::HashUtilities (from Perl distribution Acme-CPANModules-HashUtilities), released on 2020-03-01.
DESCRIPTION
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
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.
Tying
The tie mechanism, although relatively slow, allows you to create various kinds of "magical" hash that does things whenever you get or set keys.
INCLUDED MODULES
FAQ
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.
HOMEPAGE
Please visit the project's homepage at https://metacpan.org/release/Acme-CPANModules-HashUtilities.
SOURCE
Source repository is at https://github.com/perlancar/perl-Acme-CPANModules-HashUtilities.
BUGS
Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModules-HashUtilities
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.
SEE ALSO
Acme::CPANModules - about the Acme::CPANModules namespace
cpanmodules - CLI tool to let you browse/view the lists
AUTHOR
perlancar <perlancar@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2020 by perlancar@cpan.org.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.