remove bless because it confuses things
Matt S Trout [Wed, 10 Nov 2010 05:05:49 +0000 (05:05 +0000)]
lib/Moo/_Utils.pm
lib/Sub/Defer.pm

index 0e5d787..c8549e8 100644 (file)
@@ -8,17 +8,13 @@ our @EXPORT = qw(_getglob _install_modifier _maybe_load_module);
 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(@_);
 }
 
index 50688c5..816190e 100644 (file)
@@ -25,9 +25,9 @@ sub defer_sub {
   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);