From 44726d1abdc534e4ac6ddfc6d91d245c8dc0ebc7 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 18 Sep 2010 20:15:21 -0500 Subject: revert the vivication changes for now, i didn't mean to release them --- lib/Package/Stash.pm | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) (limited to 'lib/Package/Stash.pm') diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm index 77236d0..32e5d30 100644 --- a/lib/Package/Stash.pm +++ b/lib/Package/Stash.pm @@ -5,7 +5,6 @@ use warnings; use Carp qw(confess); use Scalar::Util qw(reftype); -use Symbol; =head1 SYNOPSIS @@ -230,32 +229,22 @@ sub get_package_symbol { my $namespace = $self->namespace; - if ($opts{vivify} && !exists $namespace->{$name}) { - if ($type eq 'ARRAY') { - $self->add_package_symbol( - $variable, - # setting our own arrayref manually loses the magicalness or - # something - $name eq 'ISA' ? () : ([]) - ); + if (!exists $namespace->{$name}) { + # assigning to the result of this function like + # @{$stash->get_package_symbol('@ISA')} = @new_ISA + # makes the result not visible until the variable is explicitly + # accessed... in the case of @ISA, this might never happen + # for instance, assigning like that and then calling $obj->isa + # will fail. see t/005-isa.t + if ($opts{vivify} && $type eq 'ARRAY' && $name ne 'ISA') { + $self->add_package_symbol($variable, []); } - elsif ($type eq 'HASH') { + elsif ($opts{vivify} && $type eq 'HASH') { $self->add_package_symbol($variable, {}); } - elsif ($type eq 'SCALAR') { - $self->add_package_symbol($variable); - } - elsif ($type eq 'IO') { - $self->add_package_symbol($variable, Symbol::geniosym); - } - elsif ($type eq 'CODE') { - # ignoring this case for now, since i don't know what would - # be useful to do here (and subs in the stash autovivify in weird - # ways too) - #$self->add_package_symbol($variable, sub {}); - } else { - confess "Unknown type $type in vivication"; + # FIXME + $self->add_package_symbol($variable) } } -- cgit v1.2.3-54-g00ecf