Hash::Slice - Make a hash from a deep slice of another hash
Version 0.03
use Hash::Slice qw/slice cslice/;
# A trivial example
my %hash = (a => 1, b => 2, c => 3);
my $slice = slice \%hash, qw/a b/;
# $slice is now { a => 1, b => 2 }
# A hairy example
my %hash = (a => 1, b => 2, c => { d => 3, e => 4 });
my $slice = slice \%hash, qw/a/, [ c => qw/e/ ];
# $slice is now { a => 1, c => { e => 4 } }
# An even hairier example
my %hash = (a => 1, b => 2, c => { d => 3, e => 4, f => { g => 5, h => 6, k => [ 0 .. 4 ] } }, z => 7);
my $slice = slice \%hash, qw/a z/, [ c => qw/e/, [ f => qw/g k/ ] ];
# $slice is now { a => 1, z => 7, c => { e => 4, f => { g => 5, k => [ 0, 1, 2, 3, 4 ] } } }
# Make a cloned-slice of %hash
my %hash = (a => 1, b => 2, c => { d => 3, e => 4, f => { g => 5, h => 6, k => [ 0 .. 4 ] } }, z => 7);
my $slice = cslice \%hash, qw/a z/, [ c => qw/e/, [ f => qw/g k/ ] ];
$slice->{c}->{e} = "red"; # $hash{c}->{e} is still 4
Hash::Slice lets you easily make a deep slice of a hash, specifically a hash
containing one or more nested hashes. Instead of just taking a slice of the
first level of a hash in an all-or-nothing manner, you can use slice to take a
slice of the first level, then take a particular slice of the second level,
and so on.
Make a copy of $hash according to @cut.
For each key in @cut, slice will copy the value of the key over to
$slice->{$key}. If $slice encounters an ARRAY instead of a key, it will
make a deep slice using the first element of ARRAY as the key and the rest of
the array as the cut.
Note, this method will not make an entry in $slice unless the key exists in
$hash
Note, unless you are making a deep cut, slice will simply copy the reference of
the data being copied, and not make a clone. If you need to make a completely
independent copy, use cslice or dcslice.
Make a copy of $hash according to @cut. $slice is an independent clone of $hash
made using Clone::clone
Make a copy of $hash according to @cut. $slice is an independent clone of $hash
made using Storable::dclone
Robert Krimen, "<rkrimen at cpan.org>"
You can contribute or fork this project via GitHub:
<http://github.com/robertkrimen/hash-slice/tree/master>
git clone git://github.com/robertkrimen/hash-slice.git Hash-Slice
Please report any bugs or feature requests to "bug-hash-slice at
rt.cpan.org", or through the web interface at
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Hash-Slice>. I will be
notified, and then you'll automatically be notified of progress on your bug as
I make changes.
You can find documentation for this module with the perldoc command.
perldoc Hash::Slice
You can also look for information at:
- •
- AnnoCPAN: Annotated CPAN documentation
<http://annocpan.org/dist/Hash-Slice>
- •
- CPAN Ratings
<http://cpanratings.perl.org/d/Hash-Slice>
- •
- RT: CPAN's request tracker
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Hash-Slice>
- •
- Search CPAN
<http://search.cpan.org/dist/Hash-Slice>
Copyright 2007 Robert Krimen, all rights reserved.
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.