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 ...