/usr/local/CPAN/Net-PSYC/Net/PSYC/Tie/AbbrevHash.pm
package Net::PSYC::Tie::AbbrevHash;
our $VERSION = '0.2';
use strict;
# 'stolen' from Tie::StdHash;
sub TIEHASH { bless {}, $_[0] }
sub STORE { $_[0]->{$_[1]} = $_[2] }
sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
sub NEXTKEY { each %{$_[0]} }
sub DELETE { delete $_[0]->{$_[1]} }
sub CLEAR { %{$_[0]} = () }
sub FETCH {
my $self = shift;
my $key = shift;
while ( $key && !exists $self->{$key}) {
unless ($key =~ s/_[^_]+$//) {
return;
}
}
return $self->{$key} if ($key && exists $self->{$key});
return;
}
sub EXISTS {
my $self = shift;
my $key = shift;
while ( $key && !exists $self->{$key}) {
$key =~ s/_[^_]+$//;
}
return exists $self->{$key};
}
1;