PATH:
usr
/
share
/
perl5
/
pod
=head1 NAME perlmroapi - Perl method resolution plugin interface =head1 DESCRIPTION As of Perl 5.10.1 there is a new interface for plugging and using method resolution orders other than the default (linear depth first search). The C3 method resolution order added in 5.10.0 has been re-implemented as a plugin, without changing its Perl-space interface. Each plugin should register itself by providing the following structure struct mro_alg { AV *(*resolve)(pTHX_ HV *stash, U32 level); const char *name; U16 length; U16 kflags; U32 hash; }; and calling C<Perl_mro_register>: Perl_mro_register(aTHX_ &my_mro_alg); =over 4 =item resolve Pointer to the linearisation function, described below. =item name Name of the MRO, either in ISO-8859-1 or UTF-8. =item length Length of the name. =item kflags If the name is given in UTF-8, set this to C<HVhek_UTF8>. The value is passed direct as the parameter I<kflags> to C<hv_common()>. =item hash A precomputed hash value for the MRO's name, or 0. =back =head1 Callbacks The C<resolve> function is called to generate a linearised ISA for the given stash, using this MRO. It is called with a pointer to the stash, and a I<level> of 0. The core always sets I<level> to 0 when it calls your function - the parameter is provided to allow your implementation to track depth if it needs to recurse. The function should return a reference to an array containing the parent classes in order. The names of the classes should be the result of calling C<HvENAME()> on the stash. In those cases where C<HvENAME()> returns null, C<HvNAME()> should be used instead. The caller is responsible for incrementing the reference count of the array returned if it wants to keep the structure. Hence, if you have created a temporary value that you keep no pointer to, C<sv_2mortal()> to ensure that it is disposed of correctly. If you have cached your return value, then return a pointer to it without changing the reference count. =head1 Caching Computing MROs can be expensive. The implementation provides a cache, in which you can store a single C<SV *>, or anything that can be cast to C<SV *>, such as C<AV *>. To read your private value, use the macro C<MRO_GET_PRIVATE_DATA()>, passing it the C<mro_meta> structure from the stash, and a pointer to your C<mro_alg> structure: meta = HvMROMETA(stash); private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg); To set your private value, call C<Perl_mro_set_private_data()>: Perl_mro_set_private_data(aTHX_ meta, &c3_alg, private_sv); The private data cache will take ownership of a reference to private_sv, much the same way that C<hv_store()> takes ownership of a reference to the value that you pass it. =head1 Examples For examples of MRO implementations, see C<S_mro_get_linear_isa_c3()> and the C<BOOT:> section of F<mro/mro.xs>, and C<S_mro_get_linear_isa_dfs()> in F<mro.c> =head1 AUTHORS The implementation of the C3 MRO and switchable MROs within the perl core was written by Brandon L Black. Nicholas Clark created the pluggable interface, refactored Brandon's implementation to work with it, and wrote this document. =cut
[-] perlport.pod
[edit]
[-] perlplan9.pod
[edit]
[-] perluts.pod
[edit]
[-] perlfork.pod
[edit]
[-] perl585delta.pod
[edit]
[-] perlopentut.pod
[edit]
[-] perl582delta.pod
[edit]
[-] perldebguts.pod
[edit]
[-] perlrebackslash.pod
[edit]
[-] perlos390.pod
[edit]
[-] perlxs.pod
[edit]
[-] perlpolicy.pod
[edit]
[-] perlbs2000.pod
[edit]
[-] perlunifaq.pod
[edit]
[-] perl586delta.pod
[edit]
[-] perlxstypemap.pod
[edit]
[-] perltoot.pod
[edit]
[-] perl5160delta.pod
[edit]
[-] perlcommunity.pod
[edit]
[-] perlsymbian.pod
[edit]
[-] perlpodspec.pod
[edit]
[-] perlguts.pod
[edit]
[-] perl5143delta.pod
[edit]
[-] perlmodlib.pod
[edit]
[-] perlre.pod
[edit]
[-] perl5122delta.pod
[edit]
[-] perlglossary.pod
[edit]
[-] perlhist.pod
[edit]
[-] perlinterp.pod
[edit]
[-] perlcall.pod
[edit]
[-] perlebcdic.pod
[edit]
[-] perl5123delta.pod
[edit]
[-] a2p.pod
[edit]
[-] perlclib.pod
[edit]
[-] perldtrace.pod
[edit]
[+]
..
[-] perl58delta.pod
[edit]
[-] perlsource.pod
[edit]
[-] perl5004delta.pod
[edit]
[-] perlopenbsd.pod
[edit]
[-] perlko.pod
[edit]
[-] perlqnx.pod
[edit]
[-] perl587delta.pod
[edit]
[-] perlmpeix.pod
[edit]
[-] perlperf.pod
[edit]
[-] perlvms.pod
[edit]
[-] perltooc.pod
[edit]
[-] perlfaq7.pod
[edit]
[-] perlgpl.pod
[edit]
[-] perldelta.pod
[edit]
[-] perlfaq5.pod
[edit]
[-] perlrecharclass.pod
[edit]
[-] perlmod.pod
[edit]
[-] perl5163delta.pod
[edit]
[-] perlbook.pod
[edit]
[-] perl.pod
[edit]
[-] perllinux.pod
[edit]
[-] perldgux.pod
[edit]
[-] perlaix.pod
[edit]
[-] perlexperiment.pod
[edit]
[-] perlvmesa.pod
[edit]
[-] perlfreebsd.pod
[edit]
[-] perlmodstyle.pod
[edit]
[-] perlfaq2.pod
[edit]
[-] perlutil.pod
[edit]
[-] perl5161delta.pod
[edit]
[-] perlreguts.pod
[edit]
[-] perlos400.pod
[edit]
[-] perlfaq8.pod
[edit]
[-] perldbmfilter.pod
[edit]
[-] perlsub.pod
[edit]
[-] perlbeos.pod
[edit]
[-] perlhacktips.pod
[edit]
[-] perlapio.pod
[edit]
[-] perlos2.pod
[edit]
[-] perlop.pod
[edit]
[-] perlhacktut.pod
[edit]
[-] perlce.pod
[edit]
[-] perltw.pod
[edit]
[-] perlintern.pod
[edit]
[-] perlepoc.pod
[edit]
[-] perlpacktut.pod
[edit]
[-] perl56delta.pod
[edit]
[-] perlfaq3.pod
[edit]
[-] perlmacos.pod
[edit]
[-] perlembed.pod
[edit]
[-] perl5120delta.pod
[edit]
[-] perl5140delta.pod
[edit]
[-] perliol.pod
[edit]
[-] perlhack.pod
[edit]
[-] perl589delta.pod
[edit]
[-] perluniintro.pod
[edit]
[-] perltodo.pod
[edit]
[-] perlcygwin.pod
[edit]
[-] perlrequick.pod
[edit]
[-] perlrun.pod
[edit]
[-] perl5005delta.pod
[edit]
[-] perlref.pod
[edit]
[-] perldata.pod
[edit]
[-] perlnewmod.pod
[edit]
[-] perllocale.pod
[edit]
[-] perlsolaris.pod
[edit]
[-] perlpragma.pod
[edit]
[-] perlboot.pod
[edit]
[-] perlirix.pod
[edit]
[-] perlvar.pod
[edit]
[-] perl581delta.pod
[edit]
[-] perlapi.pod
[edit]
[-] perl5121delta.pod
[edit]
[-] perltoc.pod
[edit]
[-] perldebtut.pod
[edit]
[-] perlform.pod
[edit]
[-] perlreftut.pod
[edit]
[-] perlfaq1.pod
[edit]
[-] perlstyle.pod
[edit]
[-] perlpod.pod
[edit]
[-] perl561delta.pod
[edit]
[-] perlnetware.pod
[edit]
[-] perluniprops.pod
[edit]
[-] perlretut.pod
[edit]
[-] perlunitut.pod
[edit]
[-] perlnumber.pod
[edit]
[-] perlhurd.pod
[edit]
[-] perldiag.pod
[edit]
[-] perllol.pod
[edit]
[-] perlfaq4.pod
[edit]
[-] perl588delta.pod
[edit]
[-] perlmacosx.pod
[edit]
[-] perlobj.pod
[edit]
[-] perlartistic.pod
[edit]
[-] perlreref.pod
[edit]
[-] perlcn.pod
[edit]
[-] perlunicode.pod
[edit]
[-] perlootut.pod
[edit]
[-] perlreapi.pod
[edit]
[-] perlvos.pod
[edit]
[-] perlgit.pod
[edit]
[-] perldebug.pod
[edit]
[-] perljp.pod
[edit]
[-] perlmodinstall.pod
[edit]
[-] perl5162delta.pod
[edit]
[-] perlfunc.pod
[edit]
[-] perltru64.pod
[edit]
[-] perlsec.pod
[edit]
[-] perlxstut.pod
[edit]
[-] perlhaiku.pod
[edit]
[-] perltrap.pod
[edit]
[-] perltie.pod
[edit]
[-] perlfaq6.pod
[edit]
[-] perl5141delta.pod
[edit]
[-] perl5124delta.pod
[edit]
[-] perlwin32.pod
[edit]
[-] perldos.pod
[edit]
[-] perlfaq9.pod
[edit]
[-] perlcheat.pod
[edit]
[-] perllexwarn.pod
[edit]
[-] perlipc.pod
[edit]
[-] perl584delta.pod
[edit]
[-] perlhpux.pod
[edit]
[-] perlfaq.pod
[edit]
[-] perlintro.pod
[edit]
[-] perl5142delta.pod
[edit]
[-] perl583delta.pod
[edit]
[-] perlriscos.pod
[edit]
[-] perldsc.pod
[edit]
[-] perl5100delta.pod
[edit]
[-] perlbot.pod
[edit]
[-] perlamiga.pod
[edit]
[-] perlmroapi.pod
[edit]
[-] perl5101delta.pod
[edit]
[-] perlthrtut.pod
[edit]
[-] perlsyn.pod
[edit]