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 )