Acme-Array-MaxSize
view release on metacpan or search on metacpan
lib/Acme/Array/MaxSize.pm view on Meta::CPAN
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;
}
my $asked = @$self - $length + @list;
if ($asked > $max_size{$self}) {
carp 'Array too long';
if ($offset == 0) {
splice @list, 0, $asked - $max_size{$self};
} else {
splice @list, $max_size{$self} - $asked;
}
}
$self->SUPER::SPLICE($offset, $length, @list);
}
=head1 NAME
Acme::Array::MaxSize - Limit the maximal size your arrays can get.
=head1 VERSION
Version 0.04
t/10-instance.t view on Meta::CPAN
splice @arr, 0, 0, 4, 5;
is "@arr", '1 2 3', 'splice 0 0';
splice @arr, 0, 1, 4, 5;
is "@arr", '5 2 3', 'splice 0 1';
splice @arr, 0, 2, 0, 1, 4;
is "@arr", '1 4 3', 'splice 0 2';
splice @arr, 3, 1, 2;
is "@arr", '1 4 3', 'splice offset >';
splice @arr, 4, 1, 2;
is "@arr", '1 4 3', 'splice offset >';
splice @arr, 2, 0, 2, 3;
is "@arr", '1 4 3', 'splice 2 0';
splice @arr, 2, 1, 2, 5;
is "@arr", '1 4 2', 'splice 2 1';
splice @arr, 2, 2, 5, 6, 3;
is "@arr", '1 4 5', 'splice 2 2';
( run in 0.470 second using v1.01-cache-2.11-cpan-49f99fa48dc )