Very cool :)
One small nitpick though, is the use of map in void context. Specifically (in Individual->get_code):
my $code = "";
map { $code .= $_} (@{$self->{GENES}});
could be:
my $code = join('', @{$self->{GENES}});
Also, if your Individual->create() method
returned $self at the end,
you could change this (in Population->new):
for my $i (0 .. $self->{SIZE}) {
my $individual = Individual->new();
$individual->create();
push (@{$self->{INDIVIDUALS}}, $individual);
}
To this:
push (@{$self->{INDIVIDUALS}}, Individual->new->create) for 0..$self->
+{SIZE};
Or maybe even this:
$self->{INDIVIDUALS} = [ map {Individual->new->create} 0..$self->{SIZE
+} ];
But now I'm probably being too nit-picky :)
</code>