ovids bug
Stevan Little [Tue, 26 Feb 2008 15:39:29 +0000 (15:39 +0000)]
Changes
lib/Class/MOP.pm
lib/metaclass.pm

diff --git a/Changes b/Changes
index ba140f0..fba4db9 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,12 @@
 Revision history for Perl extension Class-MOP.
 
 0.54
+    * Class::MOP
+      metaclass
+      - making sure that load_class never gets
+        passed a value from @_ or $_ to squash 
+        Ovid's bug (http://use.perl.org/~Ovid/journal/35763)
+
     * Class::MOP::Class
       - make_{immutable,mutable} now return 1
         (cause Sartak asked)
index 619fca7..bcaf6a8 100644 (file)
@@ -77,9 +77,9 @@ sub is_class_loaded {
     my $class = shift;
     no strict 'refs';
     return 1 if defined ${"${class}::VERSION"} || defined @{"${class}::ISA"};
-    foreach (keys %{"${class}::"}) {
-            next if substr($_, -2, 2) eq '::';
-            return 1 if defined &{"${class}::$_"};
+    foreach my $symbol (keys %{"${class}::"}) {
+            next if substr($symbol, -2, 2) eq '::';
+            return 1 if defined &{"${class}::${symbol}"};
     }
     return 0;
 }
index 2b048db..1a388d2 100644 (file)
@@ -7,7 +7,7 @@ use warnings;
 use Carp         'confess';
 use Scalar::Util 'blessed';
 
-our $VERSION   = '0.04';
+our $VERSION   = '0.05';
 our $AUTHORITY = 'cpan:STEVAN';
 
 use Class::MOP;
@@ -26,9 +26,14 @@ sub import {
             || confess "The metaclass ($metaclass) must be derived from Class::MOP::Class";
     }
     my %options = @_;
-    #make sure the custom metaclasses get loaded
-    map{ Class::MOP::load_class($options{$_}) }
-      grep{ /^(attribute|method|instance)_metaclass/ } keys %options;
+    
+    # make sure the custom metaclasses get loaded
+    foreach my $class (grep { 
+                            /^(attribute|method|instance)_metaclass/ 
+                        } keys %options) {
+        Class::MOP::load_class($options{$class})
+    }
+
     my $package = caller();
 
     # create a meta object so we can install &meta