From 25c87f5c26ea1057a28acd82fc734aad9c4360dd Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 11 Nov 2010 19:43:04 -0600 Subject: fix some edge cases --- lib/Package/Stash.pm | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'lib/Package/Stash.pm') diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm index 6c361c1..88f921e 100644 --- a/lib/Package/Stash.pm +++ b/lib/Package/Stash.pm @@ -204,12 +204,7 @@ sub has_package_symbol { my $entry_ref = \$namespace->{$name}; if (reftype($entry_ref) eq 'GLOB') { - if ( $type eq 'SCALAR' ) { - return defined ${ *{$entry_ref}{SCALAR} }; - } - else { - return defined *{$entry_ref}{$type}; - } + return defined *{$entry_ref}{$type}; } else { # a symbol table entry can be -1 (stub), string (stub with prototype), @@ -392,10 +387,10 @@ sub list_all_package_symbols { # type (SCALAR|ARRAY|HASH|CODE) if ($type_filter eq 'CODE') { return grep { - (ref($namespace->{$_}) - ? (ref($namespace->{$_}) eq 'SCALAR') - : (ref(\$namespace->{$_}) eq 'GLOB' - && defined(*{$namespace->{$_}}{CODE}))); + # any non-typeglob in the symbol table is a constant or stub + ref(\$namespace->{$_}) ne 'GLOB' + # regular subs are stored in the CODE slot of the typeglob + || defined(*{$namespace->{$_}}{CODE}); } keys %{$namespace}; } else { return grep { *{$namespace->{$_}}{$type_filter} } keys %{$namespace}; -- cgit v1.2.3-54-g00ecf