Ambrosia

 view release on metacpan or  search on metacpan

lib/Ambrosia/Utils/Container.pm  view on Meta::CPAN

package Ambrosia::Utils::Container;
use strict;
use warnings;

use Data::Dumper;

use Ambrosia::Meta;
class
{
    private => [qw/__data/]
};

our $VERSION = 0.010;

sub _init
{
    my $self = shift;
    $self->SUPER::_init(@_);
    $self->__data ||= {};
}

sub TIEHASH { $_[1]; }
sub STORE    { }
sub FETCH    { $_[0]->__data->{$_[1]} }
sub FIRSTKEY { each %{$_[0]->__data}; }
sub NEXTKEY  { each %{$_[0]->__data} }
sub EXISTS   { exists $_[0]->__data->{$_[1]} }
sub DELETE   { } #delete $_[0]->__data->{$_[1]} }
sub CLEAR    { } #$_[0]->__data = {} }
sub SCALAR   { scalar %{$_[0]->__data} }
sub DESTROY  { untie $_[0]; }

sub put
{
    my $self = shift;

    my @keys = ();
    while( @_ && (my $key = shift) )
    {
        push @keys, $key;
        my $value = shift;
        next if CORE::exists $self->__data->{$key} && defined $self->__data->{$key};
        $self->__data->{$key} = $value;
    }

    return wantarray ? (map { $_ => $self->__data->{$_} } @keys) : join ',', @{$self->__data}{@keys};
}

sub set
{
    my $self = shift;

    my @keys = ();
    while( @_ && (my $key = shift) )
    {
        push @keys, $key;
        my $value = shift;
        $self->__data->{$key} = $value;
    }

    return wantarray
        ? (map { $_ => $self->__data->{$_} } @keys)
        : join ',', grep defined $_, @{$self->__data}{@keys};
}



( run in 2.458 seconds using v1.01-cache-2.11-cpan-98e64b0badf )