#!/usr/bin/perl # Piece_m.pl -- 'Moose' version of Piece.pm use strict; use feature ":5.10"; use Data::Dumper::Simple; our $VERSION = '0.02'; package Piece; use Moose; use Moose::Util::TypeConstraints; my %pieces; enum 'Side' => qw(white black); has 'side' => ( is => 'ro', isa => 'Side', required => 1 ); enum 'Name' => qw(K Q R B N P); has 'name' => ( is => 'ro', isa => 'Name', required => 1 ); enum 'ID' => qw ( WQR WQN WQB WQ WK WKB WKN WKR WQRP WQNP WQBP WQP WKP WKBP WKNP WKRP BQR BQN BQB BQ BK BKB BKN BKR BQRP BQNP BQBP BQP BKP BKBP BKNP BKRP ); has 'id' => ( is => 'ro', isa => 'ID', required => 1, trigger => \&check_id ); sub check_id { my $self = shift; if ( exists( $pieces{ $self->{id} } ) ) { confess "", $self->{id}, " already declared"; } else { $pieces{ $self->{id} }++; } } package Main; use Test::More 'no_plan'; use Test::Fatal; my $wk = Piece->new( side => 'white', name => 'K', id => 'WK' ); isa_ok( $wk, 'Piece' ); isa_ok( $wk, 'Moose::Object' ); is( $wk->side, 'white', '... got the right side for wk' ); is( $wk->name, 'K', '... got the right name for wk' ); is( $wk->id, 'WK', '... got the right id for wk' ); my @methods = Piece->meta->get_method_list(); print Dumper(@methods);