package MooseX::NonMoose; use Moose (); use Moose::Exporter; =head1 NAME MooseX::NonMoose - easy subclassing of non-Moose classes =head1 SYNOPSIS package Term::VT102::NBased; use Moose; use MooseX::NonMoose; extends 'Term::VT102'; has [qw/x_base y_base/] => ( is => 'ro', isa => 'Int', default => 1, ); around x => sub { my $orig = shift; my $self = shift; $self->$orig(@_) + $self->x_base - 1; }; # ... (wrap other methods) no Moose; # no need to fiddle with inline_constructor here __PACKAGE__->meta->make_immutable; my $vt = Term::VT102::NBased->new(x_base => 0, y_base => 0); =head1 DESCRIPTION =cut Moose::Exporter->setup_import_methods; sub init_meta { shift; my %options = @_; Moose->init_meta(%options); Moose::Util::MetaRole::apply_metaclass_roles( for_class => $options{for_class}, metaclass_roles => ['MooseX::NonMoose::Meta::Role::Class'], constructor_class_roles => ['MooseX::NonMoose::Meta::Role::Constructor'], ); return Class::MOP::class_of($options{for_class}); } =head1 AUTHOR Jesse Luehrs =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2009 by Jesse Luehrs. This is free software; you can redistribute it and/or modify it under the same terms as perl itself. =head1 TODO =over 4 =item * Provide some way to manipulate the argument list that gets passed to the superclass constructor, to support setting attributes in the constructor for a subclass of a class whose constructor does strict argument checking. =item * Allow for constructors with names other than C. =back =head1 BUGS/CAVEATS =over 4 =item * The reference that the non-Moose class uses as its instance type B match the instance type that Moose is using (currently, Moose only supports hashref based instances). =item * Arguments passed to the constructor will be passed as-is to the superclass constructor - there is currently no BUILDARGS-like munging available for this step (BUILDARGS is still available to munge the argument list that Moose sees). =item * Completely overriding the constructor in a class using C (i.e. using C) currently doesn't work, although using method modifiers on the constructor should work identically to normal Moose classes. =item * C currently assumes in several places that the superclass constructor will be called C. This may be made configurable in the future. =back Please report any bugs through RT: email C, or browse to L. =head1 SEE ALSO L L - serves the same purpose, but with a radically different (and far more hackish and worse) implementation. =head1 SUPPORT You can find this documentation for this module with the perldoc command. perldoc MooseX::NonMoose You can also look for information at: =over 4 =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * RT: CPAN's request tracker L =item * Search CPAN L =back =cut 1;