sub get_state { my ($self, $contents) = @_; $contents =~ s/\r//g; my %session = (); foreach (split /\n/, $contents) { if (/^ *\d+\+*\|/) { # Data record my @values = split(/\|/); foreach (@values) { s/^\ *//; }; my %stats; @stats{@{$self->{fields}}} = @values; # do some clean up / bring to common values $stats{position} =~ s/\+//g; # sometimes there is a "+" $stats{driver} =~ s/ *\(R\)$//; # I don't care if rookie $stats{best_speed} =~ s/\+//g; # sometimes there is a "+" at end if ($stats{status} eq '') { # not all the series track run, pit, etc $stats{status} = 'Run' } $stats{status} =~ s/In Pit/Pit/ig; $stats{status} =~ s/Active/Run/; $stats{status} =~ s/Pace_Laps/Pace/; # convert time from MM:SS to seconds $stats{last_lap} = $self->time_to_dec($stats{last_lap}); $stats{best_lap} = $self->time_to_dec($stats{best_lap}); $stats{id} = $stats{car}; #Logger->log(Dumper(%stats)); push @{$session{positions}}, \%stats; } elsif (/^//; $msg =~ s/^.* : //; $session{control_message} = $msg unless $msg =~ /^\S+ flag/i; $session{event} = $values[0]; $session{event} =~ s/\<\!(.*)/$1/; } else { #print "garbage: $_\n"; } } Logger->log("series: |$session{series}| event: |$session{event}| flag: |$session{flag}| time: |$session{time}|"); return %session; }