# NAME MouseX::Types::Enum - Object-oriented, Java-like enum type declaration based on Mouse # SYNOPSIS In the following example, - Three enumeration constants, `APPLE`, `ORANGE`, and `BANANA` are defined. - Three instance variables, `name`, `color`, and `has_seed` are defined. - A method `make_sentence($suffix)` is defined. code: { package Fruits; use strict; use warnings; use Mouse; extends 'MouseX::Types::Enum'; has name => (is => 'ro', isa => 'Str'); has color => (is => 'ro', isa => 'Str'); has price => (is => 'ro', isa => 'Num'); has has_seed => (is => 'ro', isa => 'Int', default => 1); sub make_sentence { my ($self, $suffix) = @_; $suffix ||= ""; return sprintf("%s is %s%s", $self->name, $self->color, $suffix); } sub APPLE {1 => ( name => 'Apple', color => 'red', price => 1.2, )} sub GRAPE {2 => ( name => 'Grape', color => 'purple', price => 3.5, )} sub BANANA {3 => ( name => 'Banana', color => 'yellow', has_seed => 0, price => 1.5, )} __PACKAGE__->_build_enum; 1; } # equivalence ok(Fruits->APPLE == Fruits->APPLE); ok(Fruits->APPLE != Fruits->GRAPE); ok(Fruits->APPLE != Fruits->BANANA); # instance variable is(Fruits->APPLE->name, 'Apple'); is(Fruits->APPLE->color, 'red'); is(Fruits->APPLE->price, 1.2); # instance method is(Fruits->APPLE->make_sentence('!'), 'Apple is red!'); # get instance is(Fruits->get(1), Fruits->APPLE); is(Fruits->get(2), Fruits->GRAPE); is(Fruits->get(3), Fruits->BANANA); is_deeply(Fruits->all, { 1 => Fruits->APPLE, 2 => Fruits->GRAPE, 3 => Fruits->BANANA, }); # DESCRIPTION MouseX::Types::Enum provides Java-like enum type declaration based on Mouse. You can declare enums which have instance variables and methods. # LICENSE Copyright (C) Naoto Ikeno. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. # AUTHOR Naoto Ikeno