sub _getglob { no strict 'refs'; \*{$_[0]} }
sub _install_modifier {
- require Class::Method::Modifiers;
my ($into, $type, $name, $code) = @_;
my $ref = ref(my $to_modify = $into->can($name));
- # if it isn't CODE, then either we're about to die, or it's a blessed
- # coderef - if it's a blessed coderef it might be deferred, and the
- # user's already doing something clever so a minor speed hit is meh.
+ require Sub::Defer;
+ Sub::Defer::undefer_sub($to_modify);
- if ($ref && $ref ne 'CODE') {
- require Sub::Defer; Sub::Defer::undefer_sub($to_modify);
- }
+ require Class::Method::Modifiers;
Class::Method::Modifiers::install_modifier(@_);
}
my ($target, $maker) = @_;
my $undeferred;
my $deferred_string;
- my $deferred = bless(sub {
+ my $deferred = sub {
goto &{$undeferred ||= undefer_sub($deferred_string)};
- }, 'Sub::Defer::Deferred');
+ };
$deferred_string = "$deferred";
$DEFERRED{$deferred} = [ $target, $maker, \$undeferred ];
*{_getglob $target} = $deferred if defined($target);