Moose::Cookbook::Extending::Debugging_BaseClassRole man page on Mageia

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

Moose::Cookbook::ExtenUsMoose::Cookbook::Extending::Debugging_BaseClassRole(3)

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

VERSION
       version 2.1005

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
       Moose is maintained by the Moose Cabal, along with the help of many
       contributors. See "CABAL" in Moose and "CONTRIBUTORS" in Moose for
       details.

COPYRIGHT AND LICENSE
       This software is copyright (c) 2013 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.18.1		Moose::Cookbook::Extending::Debugging_BaseClassRole(3)
[top]

List of man pages available for Mageia

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