Okay, here's my go at it. Uses POE so there can be many people "living" at once and creating new children. Reality has been sped up a bit so that each year of a person's life only takes 1/10 of a second. Actually runs too, though you may not want to leave it going for too long as the "population" increases rapidly. :-)

While this one may be more functional, the OP is a lot more fun to read, partially because I wanted to use strict and warnings which leaves less room for stuff that reads well, but doesn't actually do anything.

This also has a big friggin comet feature, just press Ctrl+C after it's been running for a while :-)

Enjoy!

#!/usr/bin/perl use strict; use warnings; use POE; *MATE = *STDOUT; POE::Session->create( inline_states => { _start => \&_start, make_baby => \&make_baby, }, ); $poe_kernel->run; sub _start { my $kernel = $_[ KERNEL ]; $kernel->alias_set('God'); $kernel->post('God', 'make_baby'); } sub make_baby { my $session = $_[ SESSION ]; POE::Session->create( inline_states => { _start => \&born, _stop => \&die, live => \&live }, args => [ $session ], ); } sub born { my ($heap, $person, $kernel, $init) = @_[ HEAP, SESSION, KERNEL, A +RG0 ]; $heap->{age} = 0; $heap->{gender} = (int(rand(2)) ? 'male' : 'female'); $heap->{person} = $person->ID - 2; $heap->{kids} = int(rand(5)); @{$heap->{actions}} = qw/Crying Sleeping Eating Pooping/; print "Child $heap->{person} born, age $heap->{age}, gender $heap- +>{gender}. Likely to have $heap->{kids} kids. Actions: " . join(', +', @{$heap->{actions}}) . "\n"; $kernel->delay('live', .1, $init); } sub live { my ($heap, $kernel, $init) = @_[ HEAP, KERNEL, ARG0 ]; $heap->{age}++; if ($heap->{'age'} == 2) { @{$heap->{actions}} = qw/Screaming Crying/; } elsif (($heap->{'age'} >= 3) && ($heap->{'age'} <= 12)) { @{$heap->{actions}} = qw/Running Playing "Getting into Trouble +"/; } elsif (($heap->{'age'} >= 13) && ($heap->{'age'} <= 15)) { if ($heap->{'gender'} eq "male") { @{$heap->{actions}} = qw/Eat Eat Eat Eat Eat Sleep/; } else { @{$heap->{actions}} = qw/Talk Talk Talk Shop Shop Sleep/; } } elsif ( ($heap->{'age'} >= 16) && ($heap->{'age'} <= 20) ) { @{$heap->{actions}} = qw/Flirt Flirt Flirt Flirt Flirt/; } elsif ($heap->{'age'} >= 21 && $heap->{'age'} <= ($heap->{'gende +r'} eq 'male' ? 74.1 : 79.5)) { select MATE; @{$heap->{actions}} = 'Making and raising kids'; if(int(rand(5)) == 1 && $heap->{kids}) { print $init->ID . "\n"; $kernel->post('God', 'make_baby') or die $!; $heap->{kids}--; } } print "Person $heap->{person} turned $heap->{age}. Their activiti +es are now: " . join(', ', @{$heap->{actions}}) . "\n"; $kernel->delay('live', .1, $init); if ($heap->{'age'} >= ($heap->{'gender'} eq 'male' ? 74.1 : 79.5)) + { print my $will = "I, Person $heap->{person}, do make and decla +re my last will and testament as follows: ...\n"; $kernel->delay('live'); } } sub die { my $heap = $_[ HEAP ]; print "Person $heap->{person} died.\n"; }

Update: Slightly restructed with "God" session because the children were keeping the parents alive after they were supposed to be dead :-)


In reply to Re: Life, in Perl. by Mr_Person
in thread Life, in Perl. by erasei

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.