X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSub%2FDefer.pm;h=1d7b106b57fae15e749e5ac8be24b995a5d843a0;hb=575ba24cb512a68d1c86bf1fdc3b7fead6075324;hp=82026872fb37858a497e37ac2e2ef2e96e40891d;hpb=46269e18c88840523ca8f64d5ed5f5146d3ba249;p=gitmo%2FMoo.git diff --git a/lib/Sub/Defer.pm b/lib/Sub/Defer.pm index 8202687..1d7b106 100644 --- a/lib/Sub/Defer.pm +++ b/lib/Sub/Defer.pm @@ -18,6 +18,9 @@ sub undefer_sub { # make sure the method slot has not changed since deferral time if (defined($target) && $deferred eq *{_getglob($target)}{CODE}||'') { no warnings 'redefine'; + + # I believe $maker already evals with the right package/name, so that + # _install_coderef calls are not necessary --ribasushi *{_getglob($target)} = $made; } push @{$DEFERRED{$made} = $DEFERRED{$deferred}}, $made; @@ -39,7 +42,7 @@ sub defer_sub { }; $deferred_string = "$deferred"; $DEFERRED{$deferred} = [ $target, $maker, \$undeferred ]; - *{_getglob $target} = $deferred if defined($target); + _install_coderef $target => $deferred if defined $target; return $deferred; }