NAME

MooseX::Declare - Declarative syntax for Moose

SYNOPSIS

use MooseX::Declare;

class BankAccount {
    has 'balance' => ( isa => 'Num', is => 'rw', default => 0 );

    method deposit (Num $amount) {
        $self->balance( $self->balance + $amount );
    }

    method withdraw (Num $amount) {
        my $current_balance = $self->balance();
        ( $current_balance >= $amount )
            || confess "Account overdrawn";
        $self->balance( $current_balance - $amount );
    }
}

class CheckingAccount extends BankAccount {
    has 'overdraft_account' => ( isa => 'BankAccount', is => 'rw' );

    before withdraw (Num $amount) {
        my $overdraft_amount = $amount - $self->balance();
        if ( $self->overdraft_account && $overdraft_amount > 0 ) {
            $self->overdraft_account->withdraw($overdraft_amount);
            $self->deposit($overdraft_amount);
        }
    }
}

DESCRIPTION

This module provides syntactic sugar for Moose, the postmodern object system for Perl 5. When used, it sets up the class and role keywords.

KEYWORDS

class

class Foo { ... }

my $anon_class = class { ... };

Declares a new class. The class can be either named or anonymous, depending on whether or not a classname is given. Within the class definition Moose and MooseX::Method::Signatures are set up automatically in addition to the other keywords described in this document. At the end of the definition the class will be made immutable. namespace::clean is injected to clean up Moose for you.

It's possible to specify options for classes:

extends
class Foo extends Bar { ... }

Sets a superclass for the class being declared.

with
class Foo with Role { ... }

Applies a role to the class being declared.

is mutable
class Foo is mutable { ... }

Causes the class not to be made immutable after its definition.

role

role Foo { ... }

my $anon_role = role { ... };

Declares a new role. The role can be either named or anonymous, depending on wheter or not a name is given. Within the role definition Moose::Role and MooseX::Method::Signatures are set up automatically in addition to the other keywords described in this document. Again, namespace::clean is injected to clean up Moose::Role and for you.

It's possible to specify options for roles:

with
role Foo with Bar { ... }

Applies a role to the role being declared.

before / after / around / override / augment

before   foo ($x, $y, $z) { ... }
after    bar ($x, $y, $z) { ... }
around   baz ($x, $y, $z) { ... }
override moo ($x, $y, $z) { ... }
augment  kuh ($x, $y, $z) { ... }

Add a method modifier. Those work like documented in Moose, except for the slightly nicer syntax and the method signatures, which work like documented in MooseX::Method::Signatures.

For the around modifier an additional argument called $orig is automatically set up as the invocant for the method.

SEE ALSO

Moose

Moose::Role

MooseX::Method::Signatures

namespace::clean

AUTHOR

Florian Ragwitz <rafl@debian.org>

COPYRIGHT AND LICENSE

Copyright (c) 2008 Florian Ragwitz

Licensed under the same terms as perl itself.