diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-10-31 10:41:56 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-10-31 10:56:09 -0500 |
commit | 67b1704808e62f27210fe992df9c45b232fe9d5b (patch) | |
tree | 19e2f7a922593fa69f3e81a5a41293e0bb86a091 /lib | |
parent | 23093e2990bf64f03ad844e7b08fffa34ead8510 (diff) | |
download | package-stash-67b1704808e62f27210fe992df9c45b232fe9d5b.tar.gz package-stash-67b1704808e62f27210fe992df9c45b232fe9d5b.zip |
revert vivication changes for now again0.13
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Package/Stash.pm | 51 |
1 files changed, 13 insertions, 38 deletions
diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm index 6c361c1..32e5d30 100644 --- a/lib/Package/Stash.pm +++ b/lib/Package/Stash.pm @@ -5,10 +5,6 @@ use warnings; use Carp qw(confess); use Scalar::Util qw(reftype); -use Symbol; -# before 5.12, assigning to the ISA glob would make it lose its magical ->isa -# powers -use constant BROKEN_ISA_ASSIGNMENT => ($] < 5.012); =head1 SYNOPSIS @@ -234,42 +230,21 @@ sub get_package_symbol { my $namespace = $self->namespace; if (!exists $namespace->{$name}) { - if ($opts{vivify}) { - if ($type eq 'ARRAY') { - if (BROKEN_ISA_ASSIGNMENT) { - $self->add_package_symbol( - $variable, - $name eq 'ISA' ? () : ([]) - ); - } - else { - $self->add_package_symbol($variable, []); - } - } - elsif ($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') { - confess "Don't know how to vivify CODE variables"; - } - else { - confess "Unknown type $type in vivication"; - } + # 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 ($opts{vivify} && $type eq 'HASH') { + $self->add_package_symbol($variable, {}); } else { - if ($type eq 'CODE') { - # this effectively "de-vivifies" the code slot. if we don't do - # this, referencing the coderef at the end of this function - # will cause perl to auto-vivify a stub coderef in the slot, - # which isn't what we want - $self->add_package_symbol($variable); - } + # FIXME + $self->add_package_symbol($variable) } } |