various tweaks, and refactor _instantiate_module not to use eval STRING
[gitmo/Class-MOP.git] / lib / Class / MOP / Module.pm
index 24eeaca..84e78ad 100644 (file)
@@ -54,26 +54,18 @@ sub create {
 }
 
 sub _instantiate_module {
-    my $self      = shift;
-    my $version   = shift;
-    my $authority = shift;
-
+    my($self, $version, $authority) = @_;
     my $package_name = $self->name;
 
-    my $code = "package $package_name;";
+    Class::MOP::_is_valid_class_name($package_name)
+        || confess "creation of $package_name failed: invalid package name";
 
-    $code .= "\$$package_name\:\:VERSION = '" . $version . "';"
-        if defined $version;
-    $code .= "\$$package_name\:\:AUTHORITY = '" . $authority . "';"
-        if defined $authority;
+    no strict 'refs';
+    scalar %{$package_name . '::'}; # touch the stash
+    ${$package_name . '::VERSION'}   = $version   if defined $version;
+    ${$package_name . '::AUTHORITY'} = $authority if defined $authority;
 
-    my $e = do {
-        local $@;
-        local $SIG{__DIE__};
-        eval $code;
-        $@;
-    };
-    confess "creation of $package_name failed : $e" if $e;
+    return;
 }
 
 1;