1use strict; 2use warnings; 3use Test::More tests => 3; 4 5{ 6 package Paper; use Moose; 7 package Scissors; use Moose; 8 package Rock; use Moose; 9 package Lizard; use Moose; 10 package Spock; use Moose; 11 12 package Game; 13 use Moose; 14 use MooseX::MultiMethods; 15 16 multi method play (Paper $x, Rock $y) { 1 } 17 multi method play (Paper $x, Spock $y) { 1 } 18 multi method play (Scissors $x, Paper $y) { 1 } 19 multi method play (Scissors $x, Lizard $y) { 1 } 20 multi method play (Rock $x, Scissors $y) { 1 } 21 multi method play (Rock $x, Lizard $y) { 1 } 22 multi method play (Lizard $x, Paper $y) { 1 } 23 multi method play (Lizard $x, Spock $y) { 1 } 24 multi method play (Spock $x, Rock $y) { 1 } 25 multi method play (Spock $x, Scissors $y) { 1 } 26 multi method play (Any $x, Any $y) { 0 } 27} 28 29my $game = Game->new; 30ok($game->play(Spock->new, Scissors->new), 'Spock smashes Scissors'); 31ok(!$game->play(Lizard->new, Rock->new), 'Rock crushes Lizard'); 32ok(!$game->play(Spock->new, Paper->new), 'Paper disproves Spock'); 33 341; 35