As expected, AI::Life::World is ridiculously slow. The C version of the program can run a million iterations in a few minutes. The Perl version takes a few days. There are many reasons for that and I've got a good handle on them, but it's going to be a long, tough slog to get this program performing at an acceptable level.
Amongst other things, this has reconfirmed my opinion that overloading accessors to also be mutators is a bad idea ($o->foo and $o->foo(7)). There's extra logic in the method and if I just separate the two (having a $o->set_foo), I get to avoid that. I also intend to get rid of Class::Struct and craft all of the methods by hand (or perhaps building methods at startup) to give me a bit more control over the performance of the system. I also need to figure out how to improve the speed at which the animals "see". The $agent->look method is taking about 25% of the entire run of the program.
The most radical idea I have, though, is to skip all data validation. I know this sounds terrible, but my thought is to use Devel::Profile to ensure that I am testing almost 100% of the program. From there, I'll start tracing the data flows and see if there's an entry point I can do data validation at and the just trust that it will work out internally. I've always admired tightrope walkers who don't use a net (I've also thought they were pretty stupid, too).