MooseX-Declare
view release on metacpan or search on metacpan
lib/MooseX/Declare.pm view on Meta::CPAN
use strict;
use warnings;
package MooseX::Declare; # git description: v0.42-6-gab03158
# ABSTRACT: (DEPRECATED) Declarative syntax for Moose
# KEYWORDS: moose extension declaration syntax sugar method class deprecated
our $VERSION = '0.43';
use aliased 'MooseX::Declare::Syntax::Keyword::Class', 'ClassKeyword';
use aliased 'MooseX::Declare::Syntax::Keyword::Role', 'RoleKeyword';
use aliased 'MooseX::Declare::Syntax::Keyword::Namespace', 'NamespaceKeyword';
use namespace::clean 0.19;
sub import {
my ($class, %args) = @_;
my $caller = caller();
strict->import;
warnings->import;
for my $keyword ($class->keywords) {
$keyword->setup_for($caller, %args, provided_by => $class);
}
}
sub keywords {
ClassKeyword->new(identifier => 'class'),
RoleKeyword->new(identifier => 'role'),
NamespaceKeyword->new(identifier => 'namespace'),
}
#pod =head1 SYNOPSIS
#pod
#pod use MooseX::Declare;
#pod
#pod class BankAccount {
#pod has 'balance' => ( isa => 'Num', is => 'rw', default => 0 );
#pod
#pod method deposit (Num $amount) {
#pod $self->balance( $self->balance + $amount );
#pod }
#pod
#pod method withdraw (Num $amount) {
#pod my $current_balance = $self->balance();
#pod ( $current_balance >= $amount )
#pod || confess "Account overdrawn";
#pod $self->balance( $current_balance - $amount );
#pod }
#pod }
#pod
#pod class CheckingAccount extends BankAccount {
#pod has 'overdraft_account' => ( isa => 'BankAccount', is => 'rw' );
#pod
#pod before withdraw (Num $amount) {
#pod my $overdraft_amount = $amount - $self->balance();
#pod if ( $self->overdraft_account && $overdraft_amount > 0 ) {
#pod $self->overdraft_account->withdraw($overdraft_amount);
#pod $self->deposit($overdraft_amount);
#pod }
#pod }
#pod }
#pod
#pod =head1 DESCRIPTION
#pod
#pod This module provides syntactic sugar for Moose, the postmodern object system
#pod for Perl 5. When used, it sets up the C<class> and C<role> keywords.
#pod
#pod B<Note:> Please see the L</WARNING> section below!
#pod
#pod =head1 KEYWORDS
#pod
#pod =head2 class
#pod
#pod class Foo { ... }
#pod
#pod my $anon_class = class { ... };
#pod
#pod Declares a new class. The class can be either named or anonymous, depending on
( run in 1.991 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )