use Scalar::Util qw( looks_like_number );
-our $VERSION = '1.14';
+our $VERSION = '1.16';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base 'Moose::Meta::Method::Accessor::Native::Hash::Writer';
+use Moose::Role;
+
+with 'Moose::Meta::Method::Accessor::Native::Hash::Writer' => {
+ -excludes => [
+ qw(
+ _minimum_arguments
+ _maximum_arguments
+ _inline_process_arguments
+ _inline_check_arguments
+ _inline_optimized_set_new_value
+ _return_value
+ )
+ ],
+};
sub _minimum_arguments { 2 }
sub _maximum_arguments { undef }
-sub _inline_check_argument_count {
+around _inline_check_argument_count => sub {
+ my $orig = shift;
my $self = shift;
return
- $self->SUPER::_inline_check_argument_count(@_) . "\n"
+ $self->$orig(@_) . "\n"
. $self->_inline_throw_error(
q{'You must pass an even number of arguments to set'})
. ' if @_ % 2;';
-}
+};
sub _inline_process_arguments {
my $self = shift;
sub _inline_optimized_set_new_value {
my ( $self, $inv, $new, $slot_access ) = @_;
- return "\@{ $slot_access }{ \@_[ \@keys_idx] } = \@_[ \@values_idx ];";
+ return "\@{ $slot_access }{ \@_[ \@keys_idx] } = \@_[ \@values_idx ]";
+}
+
+sub _return_value {
+ my ( $self, $slot_access ) = @_;
+
+ return "return wantarray ? \@{ $slot_access }{ \@_[ \@keys_idx ] } : ${slot_access}->{ \$_[ \$keys_idx[0] ] };";
}
+no Moose::Role;
+
1;