Class::C3::Adopt::NEXT man page on Pidora

Man page or keyword search:  
man Server   31170 pages
apropos Keyword Search (all sections)
Output format
Pidora logo
[printable version]

Class::C3::Adopt::NEXTUser Contributed Perl DocumentaClass::C3::Adopt::NEXT(3)

NAME
       Class::C3::Adopt::NEXT - make NEXT suck less

SYNOPSIS
	   package MyApp::Plugin::FooBar;
	   #use NEXT;
	   use Class::C3::Adopt::NEXT;
	   # or 'use Class::C3::Adopt::NEXT -no_warn;' to suppress warnings

	   # Or use warnings::register
	   # no warnings 'Class::C3::Adopt::NEXT';

	   # Or suppress warnings in a set of modules from one place
	   # no Class::C3::Adopt::NEXT qw/ Module1 Module2 Module3 /;
	   # Or suppress using a regex
	   # no Class::C3::Adopt::NEXT qr/^Module\d$/;

	   sub a_method {
	       my ($self) = @_;
	       # Do some stuff

	       # Re-dispatch method
	       # Note that this will generate a warning the _first_ time the package
	       # uses NEXT unless you un comment the 'no warnings' line above.
	       $self->NEXT::method();
	   }

DESCRIPTION
       NEXT was a good solution a few years ago, but isn't any more.  It's
       slow, and the order in which it re-dispatches methods appears random at
       times. It also encourages bad programming practices, as you end up with
       code to re-dispatch methods when all you really wanted to do was run
       some code before or after a method fired.

       However, if you have a large application, then weaning yourself off
       "NEXT" isn't easy.

       This module is intended as a drop-in replacement for NEXT, supporting
       the same interface, but using Class::C3 to do the hard work. You can
       then write new code without "NEXT", and migrate individual source files
       to use "Class::C3" or method modifiers as appropriate, at whatever pace
       you're comfortable with.

WARNINGS
       This module will warn once for each package using NEXT. It uses
       warnings::register, and so can be disabled like by adding "no warnings
       'Class::C3::Adopt::NEXT';" to each package which generates a warning,
       or adding "use Class::C3::Adopt::NEXT -no_warn;", or disable multiple
       modules at once by saying:

	   no Class::C3::Adopt::NEXT qw/ Module1 Module2 Module3 /;

       somewhere before the warnings are first triggered. You can also setup
       entire name spaces of modules which will not warn using a regex, e.g.

	   no Class::C3::Adopt::NEXT qr/^Module\d$/;

MIGRATING
   Current code using NEXT
       You add "use MRO::Compat" to the top of a package as you start
       converting it, and gradually replace your calls to "NEXT::method()"
       with "maybe::next::method()", and calls to "NEXT::ACTUAL::method()"
       with "next::method()".

       Example:

	   sub yourmethod {
	       my $self = shift;

	       # $self->NEXT::yourmethod(@_); becomes
	       $self->maybe::next::method();
	   }

	   sub othermethod {
	       my $self = shift;

	       # $self->NEXT::ACTUAL::yourmethodname(); becomes
	       $self->next::method();
	   }

       On systems with Class::C3::XS present, this will automatically be used
       to speed up method re-dispatch. If you are running perl version 5.9.5
       or greater then the C3 method resolution algorithm is included in perl.
       Correct use of MRO::Compat as shown above allows your code to be
       seamlessly forward and backwards compatible, taking advantage of native
       versions if available, but falling back to using pure perl "Class::C3".

   Writing new code
       Use Moose and make all of your plugins Moose::Roles, then use method
       modifiers to wrap methods.

       Example:

	   package MyApp::Role::FooBar;
	   use Moose::Role;

	   before 'a_method' => sub {
	       my ($self) = @_;
	       # Do some stuff
	   };

	   around 'a_method' => sub {
	       my $orig = shift;
	       my $self = shift;
	       # Do some stuff before
	       my $ret = $self->$orig(@_); # Run wrapped method (or not!)
	       # Do some stuff after
	       return $ret;
	   };

	   package MyApp;
	   use Moose;

	   with 'MyApp::Role::FooBar';

CAVEATS
       There are some inheritance hierarchies that it is possible to create
       which cannot be resolved to a simple C3 hierarchy. In that case, this
       module will fall back to using "NEXT". In this case a warning will be
       emitted.

       Because calculating the MRO of every class every time "->NEXT::foo" is
       used from within it is too expensive, runtime manipulations of @ISA are
       prohibited.

FUNCTIONS
       This module replaces "NEXT::AUTOLOAD" with it's own version. If
       warnings are enabled then a warning will be emitted on the first use of
       "NEXT" by each package.

SEE ALSO
       MRO::Compat and Class::C3 for method re-dispatch and Moose for method
       modifiers and roles.

       NEXT for documentation on the functionality you'll be removing.

AUTHORS
	 Florian Ragwitz <rafl@debian.org>
	 Tomas Doran <bobtfish@bobtfish.net>

COPYRIGHT AND LICENSE
       This software is copyright (c) 2010 by Florian Ragwitz.

       This is free software; you can redistribute it and/or modify it under
       the same terms as the Perl 5 programming language system itself.

perl v5.14.1			  2010-05-07	     Class::C3::Adopt::NEXT(3)
[top]

List of man pages available for Pidora

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net