only call apply_single_role_to_package for backcompat if it is really needed
Graham Knop [Thu, 11 Jul 2013 00:39:16 +0000 (20:39 -0400)]
lib/Role/Tiny.pm

index 4de4f33..f0f5d76 100644 (file)
@@ -201,11 +201,15 @@ sub apply_roles_to_package {
       $me->$step($to, $role);
     }
   }
-  # backcompat: allow subclasses to use apply_single_role_to_package
-  # to apply changes.  set a local var so ours does nothing.
-  local our $SKIP_APPLY = 1;
-  foreach my $role (@roles) {
-    $me->apply_single_role_to_package($to, $role);
+  if ($me ne __PACKAGE__
+      and $me->can('apply_single_role_to_package')
+        != \&apply_single_role_to_package) {
+    # backcompat: allow subclasses to use apply_single_role_to_package
+    # to apply changes.  set a local var so ours does nothing.
+    local our $SKIP_APPLY = 1;
+    foreach my $role (@roles) {
+      $me->apply_single_role_to_package($to, $role);
+    }
   }
   $APPLIED_TO{$to}{join('|',@roles)} = 1;
 }