diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-01-03 19:55:53 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-01-03 19:55:53 -0600 |
commit | d4f755a790d60fee0757d406d397153d99f1649e (patch) | |
tree | 54456e4f6545ad396fa79e14d98143c0eef3b565 | |
parent | cd533531efb6c83b02fd00fc50b264beb066be5f (diff) | |
download | package-stash-d4f755a790d60fee0757d406d397153d99f1649e.tar.gz package-stash-d4f755a790d60fee0757d406d397153d99f1649e.zip |
handle things like PL_sv_undef here
it's B::SPECIAL, not B::SV (sigh)
-rw-r--r-- | lib/Package/Stash/PP.pm | 5 | ||||
-rwxr-xr-x | t/edge-cases.t | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/Package/Stash/PP.pm b/lib/Package/Stash/PP.pm index 2508052..71ee4e5 100644 --- a/lib/Package/Stash/PP.pm +++ b/lib/Package/Stash/PP.pm @@ -250,7 +250,10 @@ sub has_symbol { return defined ${ *{$entry_ref}{$type} }; } else { - return B::svref_2object($entry_ref)->SV->isa('B::SV'); + my $sv = B::svref_2object($entry_ref)->SV; + return $sv->isa('B::SV') + || ($sv->isa('B::SPECIAL') + && $B::specialsv_name[$$sv] ne 'Nullsv'); } } else { diff --git a/t/edge-cases.t b/t/edge-cases.t index 49f56ed..58b819e 100755 --- a/t/edge-cases.t +++ b/t/edge-cases.t @@ -87,4 +87,10 @@ SKIP: { is($warning, undef, "no redefinition warnings"); } +{ + my $stash = Package::Stash->new('Baz'); + $stash->add_symbol('$baz', \undef); + ok($stash->has_symbol('$baz')); +} + done_testing; |