Moose::Cookbook::Extending::Recipe25.12 man page on MacOSX

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

Moose::Cookbook::ExtenUser:Contributed PMoose::Cookbook::Extending::Recipe2(3)

NAME
       Moose::Cookbook::Extending::Recipe2 - Providing a role for the base
       object class

VERSION
       version 2.0205

SYNOPSIS
	 package MooseX::Debugging;

	 use Moose::Exporter;

	 Moose::Exporter->setup_import_methods(
	     base_class_roles => ['MooseX::Debugging::Role::Object'],
	 );

	 package MooseX::Debugging::Role::Object;

	 use Moose::Role;

	 sub BUILD {}
	 after BUILD => sub {
	     my $self = shift;

	     warn "Made a new " . ( ref $self ) . " object\n";
	 };

DESCRIPTION
       In this example, we provide a role for the base object class that adds
       some simple debugging output. Every time an object is created, it spits
       out a warning saying what type of object it was.

       Obviously, a real debugging role would do something more interesting,
       but this recipe is all about how we apply that role.

       In this case, with the combination of Moose::Exporter and
       Moose::Util::MetaRole, we ensure that when a module does
       "use MooseX::Debugging", it automatically gets the debugging role
       applied to its base object class.

       There are a few pieces of code worth looking at more closely.

	 Moose::Exporter->setup_import_methods(
	     base_class_roles => ['MooseX::Debugging::Role::Object'],
	 );

       This creates an "import" method in the "MooseX::Debugging" package.
       Since we are not actually exporting anything, we do not pass
       "setup_import_methods" any parameters related to exports, but we need
       to have an "import" method to ensure that our "init_meta" method is
       called. The "init_meta" is created by "setup_import_methods" for us,
       since we passed the "base_class_roles" parameter. The generated
       "init_meta" will in turn call
       Moose::Util::MetaRole::apply_base_class_roles.

	 sub BUILD {}
	 after BUILD => sub {
	     ...
	 };

       Due to the way role composition currently works, if the class that a
       role is composed into contains a "BUILD" method, then that will
       override the "BUILD" method in any roles it composes, which is
       typically not what you want. Using a method modifier on "BUILD" avoids
       this issue, since method modifiers compose together rather than being
       overridden. Method modifiers require that a method exists in order to
       wrap, however, so we also provide a stub method to wrap if no "BUILD"
       method exists in the class.

AUTHOR
       Stevan Little <stevan@iinteractive.com>

COPYRIGHT AND LICENSE
       This software is copyright (c) 2011 by Infinity Interactive, Inc..

       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.12.5			  2011-0Moose::Cookbook::Extending::Recipe2(3)
[top]

List of man pages available for MacOSX

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