Beitrag von Sander (8133 Beiträge) am Sonntag, 4.März.2001, 02:13.
variable mit inhalt von liste vergleichen?
Ich habe ne $EMail, die soll mit dem Inhalt von @mail (alles emailadressen) verglichen werden und wenn das Element in der liste nicht existiert, mit push angehangen werden. Wie stelle ich den Vergleich an?
Sander
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Sonntag, 4.März.2001, 18:48.
Re: variable mit inhalt von liste vergleichen?
Hehe, die Frage taucht bestimmt in der Perl-Faq auf ;-)
Mal sehen, erste Idee wäre folgende:
$ok=0;
foreach (@mail)
{
if($EMail eq $_) { $ok=1; last; }
}
push @mail, $EMail unless $ok;
Schneller müsste es hiermit gehen und kürzer ist es auch:
push @mail, $EMail if index(" @mail ", " $EMail ")<0);
Voraussetzung: Der List-Trenner ist nicht verstellt worden (das ist irgendeine besondere Variable von Perl, weiss grad nicht auswendig, welche)
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Sonntag, 4.März.2001, 18:49.
Re: variable mit inhalt von liste vergleichen? - oops, klammer zuviel
Antworten
Beitrag von Winkiller (175 Beiträge) am Montag, 5.März.2001, 17:24. WWW: www.hpks.org
Re: variable mit inhalt von liste vergleichen?
Der List-Trenner ist doch bestimmt $|
oder?
Oder ist es $? oder $! oder $: $= könnte es auch noch geben und $( $) sowie $" und $* nicht zu vergessen $+ vielleicht gibts noch $$, ${ oder $}
Aber ich glaube es ist $|
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 5.März.2001, 18:11.
Re: variable mit inhalt von liste vergleichen?
keine Ahnung aber wenn ich out @mail; schreibe, kommt zB:
sander@snowpage.desander@snowpage.deusw ohne leerzeichen oder anderem getrennt. Auf jeden Fall klappt Christoph sein Vorschlag mit Index aber ohne Leerzeichen bei (" @mail ", " $EMail ").
Danke
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 5.März.2001, 18:23.
Re: variable mit inhalt von liste vergleichen?
Es gibt einen Unterschied zwischen
und
"@mail"
Letzteres wird speziell "interpoliert" und bedeutet, dass zwischen jedem einzelnen Element der Liste ein bestimmtes Zeichen ausgegeben wird, normalerweise das Leerzeichen. Das kann man aber verstellen, indem man der speziellen Variablen $" (das ist gleich die Antwort für Winkiller, jetzt hab ich dann doch nachgeguckt ;-) Ach ja: $| ist die "autoflush"-variable, wenn man die auf 1 setzt, dann werden Ausgaben _sofort_ gemacht und nicht gepuffert) einen anderen Wert zuweist:
Gibt die Liste mit Kommas dazwischen aus...
Die Idee bei obiger Zeile ist, dass " @mail " z.B. sowas ergibt:
" hans@gmx.de huber@web.de bla@blubb.de "
(die Anführungsstriche gehören nicht zum eigentlichen Text) und somit findet " $EMail " z.B. " hans@web.de ". Würde man das mit den Leerzeichen weglassen, würde z.B. auch "er@web.de" gefunden werden, was nicht gewünscht ist...
Antworten
Beitrag von Sander (8133 Beiträge) am Montag, 5.März.2001, 20:51.
Re: variable mit inhalt von liste vergleichen?
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Dienstag, 6.März.2001, 18:52.
Re: variable mit inhalt von liste vergleichen?
Antworten
Beitrag von Sander (8133 Beiträge) am Dienstag, 6.März.2001, 19:46.
Re: variable mit inhalt von liste vergleichen?
Antworten
Beitrag von Christoph Bergmann (8110 Beiträge) am Freitag, 9.März.2001, 15:22.
Re: variable mit inhalt von liste vergleichen? - wunder ;-)
Na, wie Du meinst... Aber wie geschrieben, das wird zu einem falschen Ergebnis führen, sobald zwei Emails wie "meier@web.de" und "er@web.de" auftauchen... ;-)
Das mit den nicht-vorhandenen Leerzeichen find ich weiterhin verwunderlich...
Antworten
Beitrag von Sander (8133 Beiträge) am Freitag, 9.März.2001, 16:04.
Re: variable mit inhalt von liste vergleichen? - wunder ;-)
und wie siehts so aus? passt das dann?
push (@mail, "$EMail,") if index("@mail,", "$EMail,")<0;
Sander
Antworten