GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
MooseX::Extended::Role(3) User Contributed Perl Documentation MooseX::Extended::Role(3)

MooseX::Extended::Role - MooseX::Extended roles

version 0.35

    package Not::Corinna::Role::Created {
        use MooseX::Extended::Role types => ['PositiveInt'];
        field created => ( isa => PositiveInt, default => sub { time } );
    }

Similar to MooseX::Extended, providing almost everything that module provides. However, for obvious reasons, it does not include MooseX::StrictConstructor or make your class immutable, or set the C3 mro.

Note that there is no need to add a 1 at the end of the role.

You may pass an import list to MooseX::Extended::Role.

    use MooseX::Extended::Role
      excludes => [qw/WarnOnConflict carp/],         # I don't want these features
      types    => [qw/compile PositiveInt HashRef/]; # I want these type tools

Allows you to import any types provided by MooseX::Extended::Types.

This:

    use MooseX::Extended::Role types => [qw/compile PositiveInt HashRef/];

Is identical to this:

    use MooseX::Extended::Role;
    use MooseX::Extended::Types qw( compile PositiveInt HashRef );

You may find some features to be annoying, or even cause potential bugs (e.g., if you have a `croak` method, our importing of "Carp::croak" will be a problem. You can exclude the following:

  • "WarnOnConflict"

        use MooseX::Extended::Role excludes => ['WarnOnConflict'];
        

    Excluding this removes the "MooseX::Role::WarnOnConflict" role.

  • "autoclean"

        use MooseX::Extended::Role excludes => ['autoclean'];
        

    Excluding this will no longer import "namespace::autoclean".

  • "carp"

        use MooseX::Extended::Role excludes => ['carp'];
        

    Excluding this will no longer import "Carp::croak" and "Carp::carp".

  • "true"

        use MooseX::Extended::Role excludes => ['true'];
        

    Excluding this will require your module to end in a true value.

  • "param"

        use MooseX::Extended::Role excludes => ['param'];
        

    Excluding this will make the "param" function unavailable.

  • "field"

        use MooseX::Extended::Role excludes => ['field'];
        

    Excluding this will make the "field" function unavailable.

Some experimental features are useful, but might not be quite what you want.

    use MooseX::Extended::Role includes => [qw/multi/];
    multi sub foo ($self, $x)      { ... }
    multi sub foo ($self, $x, $y ) { ... }

See MooseX::Extended::Manual::Includes for more information.

In Moose if a class defines a method of the name as the method of a role it's consuming, the role's method is silently discarded. With MooseX::Extended::Role, you get a warning. This makes maintenance easier when to prevent you from accidentally overriding a method.

For example:

    package My::Role {
        use MooseX::Extended::Role;
        sub name {'Ovid'}
    }
    package My::Class {
        use MooseX::Extended;
        with 'My::Role';
        sub name {'Bob'}
    }

The above code will still run, but you'll get a very verbose warning:

    The class My::Class has implicitly overridden the method (name) from
    role My::Role. If this is intentional, please exclude the method from
    composition to silence this warning (see Moose::Cookbook::Roles::Recipe2)

To silence the warning, just be explicit about your intent:

    package My::Class {
        use MooseX::Extended;
        with 'My::Role' => { -excludes => ['name'] };
        sub name {'Bob'}
    }

Alternately, you can exclude this feature. We don't recommend this, but it might be useful if you're refactoring a legacy Moose system.

    use MooseX::Extended::Role excludes => [qw/WarnOnConflict/];

"param" and "field" in roles allow the same attribute shortcuts as MooseX::Extended.

If the MooseX::Extended::Role is loaded via stringy eval, "true" is not loaded, This is because there were intermittant errors (maybe 1 out of 5 times) being thrown. Removing this feature under stringy eval solves this. See this github ticket for more infomration <https://github.com/Ovid/moosex-extended/pull/34>.

Let's say you've settled on the following feature set:

    use MooseX::Extended::Role
        excludes => [qw/WarnOnConflict carp/],
        includes => [qw/multi/];

And you keep typing that over and over. We've removed a lot of boilerplate, but we've added different boilerplate. Instead, just create "My::Custom::Moose::Role" and "use My::Custom::Moose::Role;". See MooseX::Extended::Role::Custom for details.

Curtis "Ovid" Poe <curtis.poe@gmail.com>

This software is Copyright (c) 2022 by Curtis "Ovid" Poe.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)
2023-06-06 perl v5.40.2

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.