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.[153] 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;[153] Remember that Perl distinguishes between a key ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access