Tying Hashes
A class implementing a tied hash should define eight
methods. TIEHASH
constructs new objects.
FETCH
and STORE
access the
key/value pairs. EXISTS
reports whether a key is
present in the hash, and DELETE
removes a key along
with its associated value.[2] CLEAR
empties the hash by deleting
all key/value pairs. FIRSTKEY
and
NEXTKEY
iterate over the key/value pairs when you
call keys
, values
, or
each
. And as usual, if you want to perform
particular actions when the object is deallocated, you may define a
DESTROY
method. (If this seems like a lot of
methods, you didn't read the last section on arrays attentively. In
any event, feel free to inherit the default methods from the standard
Tie::Hash
module, redefining only the interesting
ones. Again, Tie::StdHash
assumes the
implementation is also a hash.)
For example, suppose you want to create a hash where every time you assign a value to a key, instead of overwriting the previous contents, the new value is appended to an array of values. That way when you say:
$h{$k} = "one"; $h{$k} = "two";
It really does:
push @{ $h{$k} }, "one"; push @{ $h{$k} }, "two";
That's not a very complicated idea, so you should be able to use
a pretty simple module. Using Tie::StdHash
as a
base class, it is. Here's a Tie::AppendHash
that
does just that:
package Tie::AppendHash; use Tie::Hash; our @ISA = ("Tie::StdHash"); sub STORE { my ($self, $key, $value) = @_; push @{$self->{key}}, $value; } 1;
Hash-Tying Methods
Here's an example of an interesting ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.