| Moose documentation | Contained in the Moose distribution. |
Class::MOP::Module - Module Meta Object
version 2.0010
A module is essentially a Class::MOP::Package with metadata, in our case the version and authority.
Class::MOP::Module - Module Meta Object
Class::MOP::Module is a subclass of Class::MOP::Package.
Overrides create from Class::MOP::Package to provide these additional
options:
versionA version number, to be installed in the $VERSION package global variable.
An authority, to be installed in the $AUTHORITY package global variable.
This is a read-only attribute which returns the $VERSION of the
package, if one exists.
This is a read-only attribute which returns the $AUTHORITY of the
package, if one exists.
This constructs a string which combines the name, version and authority.
This will return a Class::MOP::Class instance for this class.
Stevan Little <stevan@iinteractive.com>
This software is copyright (c) 2011 by Infinity Interactive, Inc..
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Moose documentation | Contained in the Moose distribution. |
package Class::MOP::Module; BEGIN { $Class::MOP::Module::AUTHORITY = 'cpan:STEVAN'; } BEGIN { $Class::MOP::Module::VERSION = '2.0010'; } use strict; use warnings; use Carp 'confess'; use Scalar::Util 'blessed'; use base 'Class::MOP::Package'; sub _new { my $class = shift; return Class::MOP::Class->initialize($class)->new_object(@_) if $class ne __PACKAGE__; my $params = @_ == 1 ? $_[0] : {@_}; return bless { # Need to quote package to avoid a problem with PPI mis-parsing this # as a package statement. # from Class::MOP::Package 'package' => $params->{package}, namespace => \undef, # attributes version => \undef, authority => \undef } => $class; } sub version { my $self = shift; ${$self->get_or_add_package_symbol('$VERSION')}; } sub authority { my $self = shift; ${$self->get_or_add_package_symbol('$AUTHORITY')}; } sub identifier { my $self = shift; join '-' => ( $self->name, ($self->version || ()), ($self->authority || ()), ); } sub create { my $class = shift; my @args = @_; unshift @args, 'package' if @args % 2 == 1; my %options = @args; my $package = delete $options{package}; my $version = delete $options{version}; my $authority = delete $options{authority}; my $meta = $class->SUPER::create($package => %options); $meta->_instantiate_module($version, $authority); return $meta; } sub _anon_package_prefix { 'Class::MOP::Module::__ANON__::SERIAL::' } sub _anon_cache_key { confess "Modules are not cacheable" } sub _instantiate_module { my($self, $version, $authority) = @_; my $package_name = $self->name; Class::MOP::_is_valid_class_name($package_name) || confess "creation of $package_name failed: invalid package name"; $self->add_package_symbol('$VERSION' => $version) if defined $version; $self->add_package_symbol('$AUTHORITY' => $authority) if defined $authority; return; } 1; # ABSTRACT: Module Meta Object
__END__