grep Problem!!
Maik
- perl
Hallo miteinander,
möchte folgendes realisieren:
Ich habe 2 Array. Diese möchte ich einander abgleichen.
Wenn aus Array 1, genannt @Liste nicht im Array 2 (@pop_array) vorhanden ist, dann soll der Eintrag ausgegeben werden!
Script:
while(@Liste) {
unless (grep(/$Liste[0]/, @pop_array)) {
print "$Liste[0]\n";
}
}
Das funktioniert ja wunderbar. Jedoch bin ich jetzt auf folgendes Problem gestoßen:
Wenn in Array @pop_array ein Eintrag names "test10" vorhanden ist und in Liste "test1", dann behauptet das Programm, dass test1 vorhanden wäre, da der Teilstring ja existiert. Ne Idee wie ich das lösen könnte????
Danke
Hi!
while(@Liste) {
unless (grep(/$Liste[0]/, @pop_array)) {
print "$Liste[0]\n";
}
}
Wenn in Array @pop_array ein Eintrag names "test10" vorhanden ist
unless (grep(/^$Liste[0]$/, @pop_array)) {
Also mit ^ am Anfang und $ am Ende der Regex. Warum eigentlich $Liste[0]?? Dann sucht er ja jedesmal das erste Feld des ersten Arrays. Sollte es nicht $_ heißen??
Gruß
use Mosche;
unless (grep(/$Liste[0]/, @pop_array)) {
Wenn in Array @pop_array ein Eintrag names "test10" vorhanden ist und in Liste "test1", dann behauptet das Programm, dass test1 vorhanden wäre, da der Teilstring ja existiert. Ne Idee wie ich das lösen könnte????
Ich verstehe nicht, warum du überhaupt eine Regex benutzt.
Außerdem ist dein Code, wie er dasteht, wahrscheinlich nicht das, was du haben willst:
for my $k (@Liste) {
unless (grep { $_ eq $k } @pop_array){
print "$_ nicht vorhanden\n";
}
}
Folgendes habe ich verändert:
Bei grep wird jetzt mit dem aktuellen Element der Liste @Liste verglichen. Du hast immer mit dem ersten verglichen.
Ich verwende hier 'eq' statt einer Regex, das verhindert das Verhalten, welches du beschreibst. Außerdem ist es deutlich schneller als der Code von alguien.
use Tschoe qw(Matti);