$spec->{trigger} = quote_sub('shift->_trigger_'.$name.'(@_)');
}
if (exists $spec->{default}) {
- if (not ref $spec->{default}) {
- die "Invalid default $spec->{default}";
- }
- elsif (ref $spec->{default} ne 'CODE') {
- require Scalar::Util;
- die "Invalid default $spec->{default}" unless Scalar::Util::blessed $spec->{default};
+ my $default = $spec->{default};
+ require Scalar::Util;
+ unless (
+ ref $default
+ and (
+ Scalar::Util::reftype $default eq 'CODE'
+ or Scalar::Util::blessed $default and $default->can('(&{}')
+ )
+ ) {
+ die "Invalid default $default";
}
}