.\" Automatically generated by Pod::Man 2.23 (Pod::Simple 3.14) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "MooseX::NonMoose 3pm" .TH MooseX::NonMoose 3pm "2011-05-09" "perl v5.12.3" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" MooseX::NonMoose \- easy subclassing of non\-Moose classes .SH "VERSION" .IX Header "VERSION" version 0.22 .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 4 \& package Term::VT102::NBased; \& use Moose; \& use MooseX::NonMoose; \& extends \*(AqTerm::VT102\*(Aq; \& \& has [qw/x_base y_base/] => ( \& is => \*(Aqro\*(Aq, \& isa => \*(AqInt\*(Aq, \& 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); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`MooseX::NonMoose\*(C'\fR allows for easily subclassing non-Moose classes with Moose, taking care of the annoying details connected with doing this, such as setting up proper inheritance from Moose::Object and installing (and inlining, at \&\f(CW\*(C`make_immutable\*(C'\fR time) a constructor that makes sure things like \f(CW\*(C`BUILD\*(C'\fR methods are called. It tries to be as non-intrusive as possible \- when this module is used, inheriting from non-Moose classes and inheriting from Moose classes should work identically, aside from the few caveats mentioned below. One of the goals of this module is that including it in a Moose::Exporter\-based package used across an entire application should be possible, without interfering with classes that only inherit from Moose modules, or even classes that don't inherit from anything at all. .PP There are several ways to use this module. The most straightforward is to just \&\f(CW\*(C`use MooseX::NonMoose;\*(C'\fR in your class; this should set up everything necessary for extending non-Moose modules. MooseX::NonMoose::Meta::Role::Class and MooseX::NonMoose::Meta::Role::Constructor can also be applied to your metaclasses manually, either by passing a \f(CW\*(C`\-traits\*(C'\fR option to your \f(CW\*(C`use Moose;\*(C'\fR line, or by applying them using Moose::Util::MetaRole in a Moose::Exporter\-based package. MooseX::NonMoose::Meta::Role::Class is the part that provides the main functionality of this module; if you don't care about inlining, this is all you need to worry about. Applying MooseX::NonMoose::Meta::Role::Constructor as well will provide an inlined constructor when you immutabilize your class. .PP \&\f(CW\*(C`MooseX::NonMoose\*(C'\fR allows you to manipulate the argument list that gets passed to the superclass constructor by defining a \f(CW\*(C`FOREIGNBUILDARGS\*(C'\fR method. This is called with the same argument list as the \f(CW\*(C`BUILDARGS\*(C'\fR method, but should return a list of arguments to pass to the superclass constructor. This allows \&\f(CW\*(C`MooseX::NonMoose\*(C'\fR to support superclasses whose constructors would get confused by the extra arguments that Moose requires (for attributes, etc.) .PP Not all non-Moose classes use \f(CW\*(C`new\*(C'\fR as the name of their constructor. This module allows you to extend these classes by explicitly stating which method is the constructor, during the call to \f(CW\*(C`extends\*(C'\fR. The syntax looks like this: .PP .Vb 1 \& extends \*(AqFoo\*(Aq => { \-constructor_name => \*(Aqcreate\*(Aq }; .Ve .PP similar to how you can already pass \f(CW\*(C`\-version\*(C'\fR in the \f(CW\*(C`extends\*(C'\fR call in a similar way. .SH "BUGS/CAVEATS" .IX Header "BUGS/CAVEATS" .IP "\(bu" 4 The reference that the non-Moose class uses as its instance type \&\fBmust\fR match the instance type that Moose is using. Moose's default instance type is a hashref, but other modules exist to make Moose use other instance types. MooseX::InsideOut is the most general solution \- it should work with any class. For globref-based classes in particular, MooseX::GlobRef will also allow Moose to work. For more information, see the \f(CW\*(C`032\-moosex\-insideout\*(C'\fR and \f(CW\*(C`033\-moosex\-globref\*(C'\fR tests bundled with this dist. .IP "\(bu" 4 Completely overriding the constructor in a class using \&\f(CW\*(C`MooseX::NonMoose\*(C'\fR (i.e. using \f(CW\*(C`sub new { ... }\*(C'\fR) currently doesn't work, although using method modifiers on the constructor should work identically to normal Moose classes. .PP Please report any bugs through \s-1RT:\s0 email \&\f(CW\*(C`bug\-moosex\-nonmoose at rt.cpan.org\*(C'\fR, or browse to http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MooseX\-NonMoose . .SH "SEE ALSO" .IX Header "SEE ALSO" .IP "\(bu" 4 \&\*(L"How do I make non-Moose constructors work with Moose?\*(R" in Moose::Manual::FAQ .IP "\(bu" 4 MooseX::Alien .Sp serves the same purpose, but with a radically different (and far more hackish) implementation. .SH "SUPPORT" .IX Header "SUPPORT" You can find this documentation for this module with the perldoc command. .PP .Vb 1 \& perldoc MooseX::NonMoose .Ve .PP You can also look for information at: .IP "\(bu" 4 AnnoCPAN: Annotated \s-1CPAN\s0 documentation .Sp http://annocpan.org/dist/MooseX\-NonMoose .IP "\(bu" 4 \&\s-1CPAN\s0 Ratings .Sp http://cpanratings.perl.org/d/MooseX\-NonMoose .IP "\(bu" 4 \&\s-1RT:\s0 \s-1CPAN\s0's request tracker .Sp http://rt.cpan.org/NoAuth/Bugs.html?Dist=MooseX\-NonMoose .IP "\(bu" 4 Search \s-1CPAN\s0 .Sp http://search.cpan.org/dist/MooseX\-NonMoose .SH "AUTHOR" .IX Header "AUTHOR" Jesse Luehrs .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2011 by Jesse Luehrs. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.