Acme-DarmstadtPM-TieHash
view release on metacpan or search on metacpan
lib/Acme/DarmstadtPM/TieHash.pm view on Meta::CPAN
package Acme::DarmstadtPM::TieHash;
# ABSTRACT: a module that shows that Perl can do all the Ruby things ;-)
use strict;
use warnings;
our $VERSION = '0.5';
our $SEP = '__Acme::DarmstadtPM::TieHash::KeySeparator__';
sub TIEHASH {
my ($class,$code) = @_;
my $self = {};
bless $self,$class;
$self->{HASH} = {};
$self->{CODE} = $code;
return $self;
}
sub FETCH {
my ($self,$key) = @_;
return if !ref $key;
my $internal_key = join $SEP, @{ $key || [] };
if ( !exists $self->{HASH}->{$internal_key} ) {
$self->{HASH}->{$internal_key} = $self->{CODE}->(@$key);
}
$self->{HASH}->{$internal_key};
}
sub STORE {
my ($self,$key,$value) = @_;
my $internal_key = join $SEP, @{ $key || [] };
$self->{HASH}->{$internal_key} = $value;
}
sub DELETE {
my ($self,$key) = @_;
my $internal_key = join $SEP, @{ $key || [] };
my $value = delete $self->{HASH}->{$internal_key};
return $value;
}
sub EXISTS {
my ($self,$key) = @_;
my $internal_key = join $SEP, @{ $key || [] };
exists $self->{HASH}->{$internal_key};
}
sub CLEAR {
my ($self) = @_;
$self->{HASH} = {};
}
sub FIRSTKEY {
my ($self) = @_;
my $a = keys %{ $self->{HASH} };
my $key = scalar each %{ $self->{HASH} };
return if !defined $key;
return [ split /$SEP/, $key ];
}
sub NEXTKEY {
( run in 0.601 second using v1.01-cache-2.11-cpan-b301d465b3d )