Ich arbeite mit einem großen Datensatz, der im Wesentlichen auf Folgendes hinausläuft:
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
Ausgehend von dem obigen Beispiel, nehmen wir an, dass die folgenden Einschränkungen gelten:
- Es werden immer 5 Zeilen mit Daten angezeigt.
- Die Daten in jeder Zeile sind in einem einzelnen Tag eingeschlossen, z. B.
<foo>...</foo>
. - Die Daten werden keine verschachtelten Tags enthalten.
- Alle Zeilen verwenden das gleiche Tag (z. B.
foo
), um ihre Daten einzuschließen.
Letztendlich möchte ich, wenn ich die oben genannten Daten als Quelle nehme, etwas Ähnliches wie das Folgende erhalten:
my %values = (
one => '111',
two => '222',
three => '333',
four => '',
five => '555'
);
Dies ist mein Versuch:
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
);
Das funktioniert, wie ich will, sieht aber hässlich aus und ist nicht sehr flexibel. Leider ist dies das Beste, was ich im Moment tun kann, da ich neu in Perl bin.
Was ist also angesichts der oben genannten Einschränkungen eine elegantere Möglichkeit, dies zu tun?