use B 'perlstring';
BEGIN {
our $CAN_HAZ_XS =
+ !$ENV{MOO_XS_DISABLE}
+ &&
_maybe_load_module('Class::XSAccessor')
&&
- (Class::XSAccessor->VERSION > 1.06)
+ (eval { Class::XSAccessor->VERSION('1.07') })
;
}
$self->{captures} = {};
$methods{$reader} =
quote_sub "${into}::${reader}"
- => $self->_generate_get($name, $spec)
+ => ' die "'.$reader.' is a read-only accessor" if @_ > 1;'."\n"
+ .$self->_generate_get($name, $spec)
=> delete $self->{captures}
;
}
.$get_default
."\n${get_indent})"
: $get_default;
+ if ( $spec->{coerce} ) {
+ $get_value = $self->_generate_coerce(
+ $name, $me, $get_value,
+ $spec->{coerce}
+ )
+ }
($spec->{isa}
? " {\n my \$value = ".$get_value.";\n "
.$self->_generate_isa_check(
my $simple = "${me}->{${name_str}} = ${value}";
if ($spec->{weak_ref}) {
- require Scalar::Util;
+ { local $@; require Scalar::Util; }
# Perl < 5.8.3 can't weaken refs to readonly vars
# (e.g. string constants). This *can* be solved by:
eval { Scalar::Util::weaken($simple); 1 } or do {
if( \$@ =~ /Modification of a read-only value attempted/) {
- require Carp;
+ { local $@; require Carp; }
Carp::croak( sprintf (
'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3',
$name_str,