Поскольку разделителя нет, вам нужно попробовать это несколькими способами:
Сначала разделите на ' '
, затем примите первые три значения:
my @array = split / /, $line;
my ($date, $time, $constant) = splice @array, 0, 3;
Снова объедините остальные поля и заново разделите на v\d+=
, чтобы получить значения:
my $rest = join ' ', @array;
# $rest should now be "v1=XXX v2=YYY ..."
my @values = split /\s*v\d+=/, $rest;
shift @values; # since the first element in @values will be empty
print join ',', $date, $time, @values;
Редактировать : Вот еще один подход, которому легче следовать, и он немного более эффективен. Это использует тот факт, что ваш постоянный текст находится между датой / временем и списком значений.
# assume that CONSTANT is your constant text
my ($datetime, $valuelist) = split /\s*CONSTANT\s*/, $line;
my ($date, $time) = split / /, $datetime;
my @values = split /\s*v\d+=/, $valuelist;
shift @values;
print join ',', $date, $time, @values, "\n";