Я работаю с большим набором данных, который в основном сводится к чему-то вроде этого:
my $input = q(
<foo>111</foo>
<foo>222</foo>
<foo>333</foo>
<foo></foo>
<foo>555</foo>
); # new-lines are either CR+LF, LF, or CR
Исходя из приведенного выше примера, давайте предположим, что действуют следующие ограничения:
- Всегда будет 5 строк данных.
- Данные в каждой строке заключены в один тег, такой как
<foo>...</foo>
.
- Данные не будут содержать вложенных тегов.
- Все строки используют один и тот же тег (например,
foo
) для включения своих данных.
В конечном счете, взяв вышесказанное в качестве источника данных, я хотел бы в итоге получить нечто похожее на это:
my %values = (
one => '111',
two => '222',
three => '333',
four => '',
five => '555'
);
Это моя попытка:
my @vals = $input =~ m!<foo>(.*?)</foo>!ig;
if (scalar @vals != 5) {
# panic
}
my %values = (
one => shift @vals,
two => shift @vals,
three => shift @vals,
four => shift @vals,
five => shift @vals
);
Это работает, как я хочу, однако выглядит уродливо и не очень гибко. К сожалению, это лучшее, что я могу сделать на данный момент, так как я новичок в Perl.
Итак, учитывая вышеприведенные ограничения, что может быть более элегантным способом сделать это?