Ich habe zwei Listen:Perl: Paar Elemente in zwei Listen
my @prefixes = ["abc", "def", "ghi", "jklmn"];
my @strings = ["abc123", "def456", "jklmnopqrst"];
Ich brauche die richtige Vorsilbe für jede Saite zu finden, so dass „abc123“ gehört „abc“ und „def456“ gehört „def "und" jklmnopqrst "gehört zu" jklmn ". Alle Zeichenfolgen haben ein Präfix in @prefixes, aber nicht alle Präfixe haben eine übereinstimmende Zeichenfolge (siehe "ghi").
Ich habe diesen Code:
use List::Util qw(first);
...
foreach my $str (@strings) {
my $prefix = first { $_ eq substr($str, 0, length($_)) } @prefixes;
print "$prefix\n";
# do something with $str and $prefix together
}
Aber es funktioniert nicht, ich bin immer Use of uninitialized value $prefix in concatenation (.) or string
Was ist los?
UPDATE: So war es eine einfache Lösung. Ich hätte meine Listen mit() und nicht mit [] initialisieren sollen. Um das noch nicht zu schließen, wie würden Sie die foreach
Anweisung loswerden?
Ok, ich bin dumm. Ich hätte meine Arrays mit() anstelle von [] initialisieren sollen. – papaiatis
Mit 'map' - aber dann haben Sie nicht so viel Flexibilität, um innen zu verarbeiten, wie Sie es mit' foreach' machen. – zdim