From d4f755a790d60fee0757d406d397153d99f1649e Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 3 Jan 2013 19:55:53 -0600 Subject: handle things like PL_sv_undef here it's B::SPECIAL, not B::SV (sigh) --- lib/Package/Stash/PP.pm | 5 ++++- t/edge-cases.t | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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; -- cgit v1.2.3