diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-05-12 12:33:44 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-05-12 12:38:50 -0500 |
commit | b746972e03adae326b05d48d28107e18b0567fe9 (patch) | |
tree | 34821112f8e0e769393b7d0d5c53a4607784db17 | |
parent | a2a2164aadab29b7424ea8f581413cf6a3b185b1 (diff) | |
download | package-stash-b746972e03adae326b05d48d28107e18b0567fe9.tar.gz package-stash-b746972e03adae326b05d48d28107e18b0567fe9.zip |
what is this i don't even
-rw-r--r-- | lib/Stash/Manip.pm | 8 | ||||
-rw-r--r-- | t/005-isa.t | 21 |
2 files changed, 28 insertions, 1 deletions
diff --git a/lib/Stash/Manip.pm b/lib/Stash/Manip.pm index 173ba13..a9f4bfa 100644 --- a/lib/Stash/Manip.pm +++ b/lib/Stash/Manip.pm @@ -205,7 +205,13 @@ sub get_package_symbol { my $namespace = $self->namespace; if (!exists $namespace->{$name}) { - if ($type eq 'ARRAY') { + # 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 ($type eq 'ARRAY' && $name ne 'ISA') { $self->add_package_symbol($variable, []); } elsif ($type eq 'HASH') { diff --git a/t/005-isa.t b/t/005-isa.t new file mode 100644 index 0000000..d21c7a7 --- /dev/null +++ b/t/005-isa.t @@ -0,0 +1,21 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; + +use Stash::Manip; + +{ + package Foo; +} + +{ + package Bar; +} + +my $stash = Stash::Manip->new('Foo'); +my @ISA = ('Bar'); +@{$stash->get_package_symbol('@ISA')} = @ISA; +isa_ok('Foo', 'Bar'); + +done_testing; |