The problem you're having is that you're creating a new hash reference in each of your if/elsif statements. I'm going to make some assumptions about your data since I don't know anything about it, but it looks like you want to group back/home/out times by day. If that's what you want then you've got 2 choices.

1) Go the route you're on and scant the array each time for the record you want to update
2) Use a hash of hash refs so you can jump straight to the record.

Not knowing anything else about your app I would go with the second, which might look something like this (I haven't tried to run this):

my %times;  #<--- hash instead of an array
my ($i,$key,$day,$dom,$mon,$time,$hour,$week_starting);
#my $times; #<---- Don't need the intermediate var anymore
while (defined($i = <FH>)) {
         next if ($i !~ /^(x|j|k|z)/);
         chomp($i);

         ($key,$day,$dom,$mon,$time,$hour) = ($i =~
/^(\w)\s+(\w+)\s+(\d+)-(\w+)-\d+\s+(\d+:\d+):.*(\d+:\d+|-\d+:-\d+)/);
         my $colour = 'black';


         if ($key =~ /x/i ) {
                 $times{$day . '-' . $dom } = {
                         day     => $day,
                         dom     => $dom,
                         morning => $time,
                 };
         }
         elsif ($key =~ /j/ ) {
                 $times{$day . '-' . $dom } = { out => $time};
         }
         elsif ($key =~ /k/) {
                 $times{$day . '-' . $dom }  = { back => $time};
         }
         elsif ($key =~ /z/) {
                 $times{$day . '-' . $dom }  = { home => $time};
         }
#push(@times,$times); #<---- Don't need to push anymore since it went straight onto the hash.
 }


I'm using the $day-$dom key but that's probably not unique enough. You probably want the full date as the key.

Hope this helps,

Peter Cornelius
Sr. Software Engineer and Supreme Commander of the Western Forces
LiveOps (http://www.liveops.com/careers)

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to