ジャンケンのアルゴリズム

Strategyパターンを練習していて出てきたジャンケンアルゴリズム。。いまさらながらプログラミングっていうのはこういったアルゴリズムを生み出すことを言うんだなと。まだまだ修行が足りません。

use strict;
use warnings;

{
    package Hand;
    use strict;
    use warnings;
    sub new {
	my ($class, $hand) = @_;
	my $self = {
	    hand => $hand,
	};
	return bless $self, $class;
    }
    sub isStrongThan {
	my ($self, $enemy) = @_;
	return $self->fight($enemy) == 1;
    }
    sub isWeakerThan {
	my ($self, $enemy) = @_;
	return $self->fight($enemy) == -1;
    }
    sub fight {
	my ($self, $enemy) = @_;
	if($self->{hand} == $enemy->{hand}){
	    return 0;
	}
	elsif(($self->{hand} + 1) % 3 == $enemy->{hand}){
	    return 1;
	}
	else {
	    return -1;
	}
    }
}
my $GOO = 0;
my $CHO = 1;
my $PAA = 2;

my $player01 = Hand->new($CHO);
my $player02 = Hand->new($CHO);

if($player01->isWeakerThan($player02)){
    print "01 lose!!\n";
}
elsif($player01->isStrongThan($player02)){
    print "01 win!!\n";
}
else {
    print "hikiwake!!\n";
}