NAME
Hash::Slice - Make a hash from a deep slice of another hash
VERSION
Version 0.03
SYNOPSIS
# 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
DESCRIPTION
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.
FUNCTIONS
$slice = slice $hash, @cut
%slice = slice $hash, @cut
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.
$slice = cslice $hash, @cut
$slice = clone_slice $hash, @cut
Make a copy of $hash according to @cut. $slice is an independent clone of $hash made using Clone::clone
$slice = dcslice $hash, @cut
$slice = dclone_slice $hash, @cut
Make a copy of $hash according to @cut. $slice is an independent clone of $hash made using Storable::dclone
AUTHOR
Robert Krimen, <rkrimen at cpan.org>
SOURCE
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
BUGS
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.
SUPPORT
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
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
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.