Acme-Array-MaxSize
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
file => 'lib/Acme/Array/MaxSize.pm',
version => $VERSION,
},
},
},
macro => { TARFLAGS => '--format=ustar -cvf' },
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
clean => { FILES => 'Acme-Array-MaxSize-*' },
);
sub MY::postamble {
return "version-bump:\n\tperl-reversion --bump Makefile.PL lib/Acme/Array/MaxSize.pm\n"
}
lib/Acme/Array/MaxSize.pm view on Meta::CPAN
package Acme::Array::MaxSize;
use 5.006;
use strict;
use warnings;
use parent 'Tie::Array';
use Carp;
my %max_size;
my $last_index = sub { $max_size{+shift} - 1 };
sub TIEARRAY {
my ($class, $max_size) = @_;
my $self = bless [], $class;
$max_size{$self} = $max_size;
return $self
}
sub STORE {
my ($self, $index, $value) = @_;
if ($index > $self->$last_index) {
carp 'Array too long';
return
}
$self->[$index] = $value;
}
sub FETCH {
my ($self, $index) = @_;
$self->[$index]
}
sub FETCHSIZE {
my $self = shift;
@$self
}
sub STORESIZE {
my ($self, $count) = @_;
if ($count > $max_size{$self}) {
carp 'Array too long';
$count = $max_size{$self};
}
$#{$self} = $count - 1;
}
sub SPLICE {
my ($self, $offset, $length, @list) = @_;
if ($offset > $max_size{$self}) {
carp 'Array too long';
return;
}
if ($offset + $length > $max_size{$self}) {
carp 'Array too long';
$length = $max_size{$self} - $offset;
}
( run in 0.264 second using v1.01-cache-2.11-cpan-4d50c553e7e )