.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) .\" .\" 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 "Ordered 3pm" .TH Ordered 3pm "2006-07-02" "perl v5.10.0" "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" Module::Pluggable::Ordered \- Call module plugins in a specified order .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 2 \& package Foo; \& use Module::Pluggable::Ordered; \& \& Foo\->call_plugins("some_event", @stuff); \& \& for my $plugin (Foo\->plugins()){ \& $plugin\->method(); \& } .Ve .PP Meanwhile, in a nearby module... .PP .Vb 3 \& package Foo::Plugin::One; \& sub some_event_order { 99 } # I get called last of all \& sub some_event { my ($self, @stuff) = @_; warn "Hello!" } \& \& sub _order { 99 } # I get listed by plugins_ordered() last .Ve .PP And in another: .PP .Vb 3 \& package Foo::Plugin::Two; \& sub some_event_order { 13 } # I get called relatively early \& sub some_event { ... } \& \& sub _order { 10 } # I get listed by plugins_ordered() early .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This module behaves exactly the same as \f(CW\*(C`Module::Pluggable\*(C'\fR, supporting all of its options, but also mixes in the \f(CW\*(C`call_plugins\*(C'\fR and \f(CW\*(C`plugins_ordered\*(C'\fR methods to your class. \f(CW\*(C`call_plugins\*(C'\fR acts a little like \f(CW\*(C`Class::Trigger\*(C'\fR; it takes the name of a method, and some parameters. Let's say we call it like so: .PP .Vb 1 \& _\|_PACKAGE_\|_\->call_plugins("my_method", @something); .Ve .PP \&\f(CW\*(C`call_plugins\*(C'\fR looks at the plugin modules found using \f(CW\*(C`Module::Pluggable\*(C'\fR for ones which provide \f(CW\*(C`my_method_order\*(C'\fR. It sorts the modules numerically based on the result of this method, and then calls \&\f(CW\*(C`$_\->my_method(@something)\*(C'\fR on them in order. This produces an effect a little like the System V init process, where files can specify where in the init sequence they want to be called. .PP \&\f(CW\*(C`plugins_ordered\*(C'\fR extends the \f(CW\*(C`plugins\*(C'\fR method created by \&\f(CW\*(C`Module::Pluggable\*(C'\fR to list the plugins in defined order. It looks for a \f(CW\*(C`_order\*(C'\fR method in the modules found using \f(CW\*(C`Module::Pluggable\*(C'\fR, and returns the modules sorted numerically in that order. For example: .PP .Vb 1 \& my @plugins = _\|_PACKAGE_\|_\->plugins(); .Ve .PP The resulting array of plugins will be sorted. If no \f(CW\*(C`_order\*(C'\fR subroutine is defined for a module, an arbitrary default value of 50 is used. .SH "OPTIONS" .IX Header "OPTIONS" The \f(CW\*(C`package\*(C'\fR option can be used to put the pluggability into another package, to be used for modules building on the functionality of this one. .PP It also provides the \f(CW\*(C`only\*(C'\fR and \f(CW\*(C`except\*(C'\fR options. .PP .Vb 2 \& # will only return the Foo::Plugin::Quux plugin \& use Module::Pluggable::Ordered only => [ "Foo::Plugin::Quux" ]; \& \& # will not return the Foo::Plugin::Quux plugin \& use Module::Pluggable::Ordered except => [ "Foo::Plugin::Quux" ]; .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Module::Pluggable, Class::Trigger .SH "AUTHOR" .IX Header "AUTHOR" Simon Cozens, (author emeritus) .PP Christopher Nehren, (current maintainer) .PP Please report bugs via the \s-1CPAN\s0 \s-1RT\s0 tracker at http://rt.cpan.org. .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright 2004 by Simon Cozens .PP Copyright 2004 by Christopher Nehren (current copyright holder) .PP This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. .SH "ACKNOWLEDGEMENTS" .IX Header "ACKNOWLEDGEMENTS" Thank you to Simon Cozens for originally writing this module. .PP Thanks to Lars Thegler for indirectly alerting me to the fact that my \s-1POD\s0 was horribly broken, for providing patches to make this module work with Perl versions < 5.6, for maintaining the port up to version 1.3, and for allowing me to take maintainership for versions 1.3 onwards.