die "Unknown is ${is}";
}
$spec->{builder} = '_build_'.$name if ($spec->{builder}||0) eq 1;
+ die "Invalid builder for $into->$name - not a valid method name"
+ if exists $spec->{builder} and (ref $spec->{builder}
+ or $spec->{builder} !~ /\A[A-Za-z_][A-Za-z0-9_]*(?:::[A-Za-z_][A-Za-z0-9_]*)*\z/);
if (($spec->{predicate}||0) eq 1) {
$spec->{predicate} = $name =~ /^_/ ? "_has${name}" : "has_${name}";
}
#
# but requires XS and is just too damn crazy
# so simply throw a better exception
- my $weak_simple = "my \$preserve; Scalar::Util::weaken(${simple})";
+ my $weak_simple = "my \$preserve; Scalar::Util::weaken(${simple}); no warnings 'void'; \$preserve";
Moo::_Utils::lt_5_8_3() ? <<"EOC" : $weak_simple;
my \$preserve;
- eval { Scalar::Util::weaken($simple); 1 } or do {
- if( \$@ =~ /Modification of a read-only value attempted/) {
- require Carp;
- Carp::croak( sprintf (
- 'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3',
- $name_str,
- ) );
- } else {
- die \$@;
+ eval { Scalar::Util::weaken($simple); 1 }
+ ? do { no warnings 'void'; \$preserve; }
+ : do {
+ if( \$@ =~ /Modification of a read-only value attempted/) {
+ require Carp;
+ Carp::croak( sprintf (
+ 'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3',
+ $name_str,
+ ) );
+ } else {
+ die \$@;
+ }
}
- };
EOC
} else {
$self->_generate_core_set($me, $name, $spec, $value);