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 )