in reply to Perl slower than java

use Math::Complex;

It doesn't look like this module is used anywhere.    Is it actually needed?



use Win32; ... "generation $generation_counter time: " . Win32::GetTickCount +. " \n" );

Perhaps you could use Time::HiRes and make your code more portable.



my $gene_length = gene_length(); ... if ( defined( $genome{$gene} ) ) { push( @phenotype, $genome{$gene} ); ... sub gene_length { my @gls = (); foreach my $key ( keys(%genome) ) { push( @gls, length($key) ); } @gls = sort(@gls); if ( $gls[0] != $gls[$#gls] ) { die("Invalid genotype"); } return ( $gls[0] ); }

You never modify the %genome hash and the keys are always the same size so you don't really need the gene_length subroutine.

If you wanted to you could just do:

my $gene_length = length +( keys %genome )[ 0 ];


Some of the places where you use arrays could be made more efficient by using strings instead.