X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FMOP%2FPackage.pm;h=2c2c0d66e89ad06be95a0a90dcb7d5f83a73a75c;hb=a4bb317200403742305b36bb18db254967d2a798;hp=8d8782c1a006528b12fe9a9e0562842b3735f8d6;hpb=361c0e55b5979fcb3613efb0651171b454fe3c16;p=gitmo%2FClass-MOP.git diff --git a/lib/Class/MOP/Package.pm b/lib/Class/MOP/Package.pm index 8d8782c..2c2c0d6 100644 --- a/lib/Class/MOP/Package.pm +++ b/lib/Class/MOP/Package.pm @@ -8,7 +8,7 @@ use B; use Scalar::Util 'blessed'; use Carp 'confess'; -our $VERSION = '0.71'; +our $VERSION = '0.76'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -32,6 +32,7 @@ sub initialize { } else { my $meta = ( ref $class || $class )->_new({ 'package' => $package_name, + %options, }); Class::MOP::store_metaclass_by_name($package_name, $meta); @@ -283,13 +284,14 @@ sub get_all_package_symbols { my $namespace = $self->namespace; - return %$namespace unless defined $type_filter; + return $namespace unless defined $type_filter; + my %ret; # for some reason this nasty impl is orders of magnitude faster than a clean version if ( $type_filter eq 'CODE' ) { my $pkg; no strict 'refs'; - return map { + %ret = map { (ref($namespace->{$_}) ? ( $_ => \&{$pkg ||= $self->name . "::$_"} ) : ( ref \$namespace->{$_} eq 'GLOB' # don't use {CODE} unless it's really a glob to prevent stringification of stubs @@ -303,12 +305,14 @@ sub get_all_package_symbols { : () }) ) ) } keys %$namespace; } else { - return map { + %ret = map { $_ => *{$namespace->{$_}}{$type_filter} } grep { !ref($namespace->{$_}) && *{$namespace->{$_}}{$type_filter} } keys %$namespace; } + + return \%ret; } 1; @@ -327,6 +331,10 @@ This is an abstraction of a Perl 5 package, it is a superclass of L and provides all of the symbol table introspection methods. +=head1 INHERITANCE + +B is a subclass of L + =head1 METHODS =over 4