don't initialize the slot unless a value is provided
Jesse Luehrs [Tue, 29 Nov 2011 09:04:56 +0000 (03:04 -0600)]
lib/Package/Stash/PP.pm
t/basic.t

index 121a57e..67e4658 100644 (file)
@@ -160,8 +160,11 @@ sub add_symbol {
 
     my $namespace = $self->namespace;
     $namespace->{$name} ||= *{ Symbol::gensym() };
-    *{ $namespace->{$name} } = ref $initial_value
-        ? $initial_value : \$initial_value;
+
+    if (@_ > 2) {
+        *{ $namespace->{$name} } = ref $initial_value
+            ? $initial_value : \$initial_value;
+    }
 }
 
 sub remove_glob {
index f20e055..ded3d77 100644 (file)
--- a/t/basic.t
+++ b/t/basic.t
@@ -252,6 +252,8 @@ is($foo_stash->get_symbol('@foo'), $ARRAY, '... got the right values for @Foo::f
 
 {
     $foo_stash->add_symbol('%zork');
+    ok(!$foo_stash->has_symbol('$zork'),
+       "add_symbol with single argument doesn't vivify scalar slot");
 
     my $syms = $foo_stash->get_all_symbols('HASH');