summaryrefslogtreecommitdiffstats
path: root/lib/Package/Stash.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-09-18 20:15:21 -0500
committerJesse Luehrs <doy@tozt.net>2010-09-18 20:15:21 -0500
commit44726d1abdc534e4ac6ddfc6d91d245c8dc0ebc7 (patch)
tree4706f0935996229d1fbc8387b500670f2f8edaf0 /lib/Package/Stash.pm
parentdc7dc3b9c67d63479e0aef011b1450ac359587b9 (diff)
downloadpackage-stash-44726d1abdc534e4ac6ddfc6d91d245c8dc0ebc7.tar.gz
package-stash-44726d1abdc534e4ac6ddfc6d91d245c8dc0ebc7.zip
revert the vivication changes for now, i didn't mean to release them
Diffstat (limited to 'lib/Package/Stash.pm')
-rw-r--r--lib/Package/Stash.pm35
1 files changed, 12 insertions, 23 deletions
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)
}
}