NAME
Hash::MoreUtils - Provide the stuff missing in Hash::Util
SYNOPSIS
use Hash::MoreUtils qw(slice slice_def slice_exists slice_grep
hashsort
);
DESCRIPTION
Similar to List::MoreUtils
, Hash::MoreUtils
contains trivial but commonly-used functionality for hashes.
FUNCTIONS
slice
HASHREF[, LIST]
Returns a hash containing the (key, value) pair for every key in LIST.
slice_def
HASHREF[, LIST]
As slice
, but only includes keys whose values are defined.
slice_exists
HASHREF[, LIST]
As slice
but only includes keys which exist in the hashref.
slice_grep
BLOCK, HASHREF[, LIST]
As slice
, with an arbitrary condition.
Unlike grep
, the condition is not given aliases to elements of anything. Instead, %_
is set to the contents of the hashref, to avoid accidentally auto-vivifying when checking keys or values. Also, 'uninitialized' warnings are turned off in the enclosing scope.
hashsort
[BLOCK,] HASHREF
my @array_of_pairs = hashsort \%hash;
my @pairs_by_length = hashsort sub { length($a) <=> length($b) }, \%hash;
Returns the (key, value) pairs of the hash, sorted by some property of the keys. By default (if no sort block given), sorts the keys with cmp
.
I'm not convinced this is useful yet. If you can think of some way it could be more so, please let me know.
safe_reverse
[BLOCK,] HASHREF
my %dup_rev = safe_reverse \%hash
sub croak_dup {
my ($k, $v, $r) = @_;
exists( $r->{$v} ) and
croak "Cannot safe reverse: $v would be mapped to both $k and $r->{$v}";
$v;
};
my %easy_rev = save_reverse \&croak_dup, \%hash
Returns safely reversed hash (value, key pairs of original hash). If no BLOCK
is given, following routine will be used:
sub merge_dup {
my ($k, $v, $r) = @_;
return exists( $r->{$v} )
? ( ref($r->{$v}) ? [ @{$r->{$v}}, $k ] : [ $r->{$v}, $k ] )
: $k;
};
The BLOCK
will be called with 3 arguments:
key
-
The key from the
( key, value )
pair in the original hash value
-
The value from the
( key, value )
pair in the original hash ref-hash
-
Reference to the reversed hash (read-only)
The BLOCK
is expected to return the value which will used for the resulting hash.
AUTHOR
Hans Dieter Pearcey, <hdp@cpan.org>
Jens Rehsack, <rehsack@cpan.org>
BUGS
Please report any bugs or feature requests to bug-hash-moreutils@rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Hash-MoreUtils. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Hash::MoreUtils
You can also look for information at:
RT: CPAN's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2005 Hans Dieter Pearcey, all rights reserved. Copyright 2010 Jens Rehsack
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.