Acme-DarmstadtPM-TieHash
view release on metacpan or search on metacpan
lib/Acme/DarmstadtPM/TieHash.pm view on Meta::CPAN
$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 {
my ($self,$last_key) = @_;
my $key = scalar each %{ $self->{HASH} };
return if !defined $key;
return [ split /$SEP/, $key ];
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Acme::DarmstadtPM::TieHash - a module that shows that Perl can do all the Ruby things ;-)
=head1 VERSION
version 0.5
=head1 SYNOPSIS
#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 2;
use constant ADT => 'Acme::DarmstadtPM::TieHash';
use_ok(ADT);
tie my %hash,ADT,sub{$_[0] + $_[-1]};
is($hash{[1,5]},6,'Check [1,5]');
untie %hash;
=head1 DESCRIPTION
Ronnie sent a mail to the mailinglist with some good Ruby stuff. I said, that all these
things can be done in Perl, too. So this module is a proof how smart Perl is...
=for Pod::Coverage TIEHASH FETCH STORE EXISTS NEXTKEY FIRSTKEY CLEAR DELETE
=head1 AUTHOR
Renee Baecker <reneeb@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2014 by Renee Baecker.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
=cut
( run in 1.568 second using v1.01-cache-2.11-cpan-b301d465b3d )