preserve global non-subs during unimport
Matt S Trout [Sun, 11 Nov 2012 19:24:16 +0000 (19:24 +0000)]
lib/Moo/_Utils.pm

index 466f3c1..9669cbf 100644 (file)
@@ -84,7 +84,14 @@ sub _unimport_coderefs {
   foreach my $name (keys %$exports) {
     if ($stash->{$name} and defined(&{$stash->{$name}})) {
       if ($rev{$target->can($name)}) {
-        delete $stash->{$name};
+        my $old = delete $stash->{$name};
+        my $full_name = join('::',$target,$name);
+        # Copy everything except the code slot back into place (e.g. $has)
+        foreach my $type (qw(SCALAR HASH ARRAY IO)) {
+          next unless defined(*{$old}{$type});
+          no strict 'refs';
+          *$full_name = *{$old}{$type};
+        }
       }
     }
   }