X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FPackage%2FStash.pm;h=88f921e846ad478c37c432308d36cd12c9e04b14;hb=25c87f5c26ea1057a28acd82fc734aad9c4360dd;hp=6c361c1a5503eb6a6f89aec461e9ba5a3becb143;hpb=dc378b60e595186cddf0b2ce35da3e6749022770;p=gitmo%2FPackage-Stash.git 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};