You didn't provide any example data for testing, so I can't guarantee that the following actually works. It does compile though.
my %abbreviations = ( G => 'Green', Y => 'Yellow', R => 'Red', C => 'Checkered', U => 'Unflagged', ); my @cleanups = ( [ position => qr{\+}, undef, 'g' ], # sometimes there is a "+" [ driver => qr{\s*\(R\)$} ], # I don't care if rookie [ best_speed => qr{\+}, undef, 'g' ], # sometimes there is a "+" a +t end [ status => qr{\A\z}, 'Run' ], # not all the series track run, + pit, etc [ status => qr{In Pit}i, 'Pit' ], [ status => qr{Active}i, 'Run' ], [ status => qr{Pace_Laps}i, 'Pace' ], ); sub get_state { my ($self, $contents) = @_; $contents =~ s/\r//g; my %session = (); foreach (split /\n/, $contents) { if (/^ \s* \d+ [+]* [|] /x) { # Data record my %stats; @stats{@{$self->{fields}}} = map { s/^\s*// } split /\|/; foreach my $cleanup (@cleanups) { my ($key, $match, $replace, $global) = @$cleanup; $global ? ( $stats{$key} =~ s/$match/$replace/g ) : ( $stats{$key} =~ s/$match/$replace/ ) } # convert time from MM:SS to seconds $stats{$_} = $self->time_to_dec($stats{$_}) for qw(last_la +p best_lap); $stats{id} = $stats{car}; #Logger->log(Dumper(%stats)); push @{$session{positions}}, \%stats; } elsif (/^</) { # Header my @values = split(/\|/); my $abbrv = $values[5]; $session{flag} = $abbreviations{$abbrv} // $abbrv unless $abbrv eq ''; my $msg = $values[16]; $msg =~ s/^>//; $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}| f +lag: |$session{flag}| time: |$session{time}|"); return %session; }
In reply to Re: Idiomize This - Cleanup/Transform
by tobyink
in thread Idiomize This - Cleanup/Transform
by johnr
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |