Nathanel2 Geschrieben 3. Oktober 2009 Geschrieben 3. Oktober 2009 Ich habe ein Perlprogramm geschrieben, aber es funktioniert nicht so wie es soll. #!/usr/bin/perl use locale; %Ausfuerer = ("Adresse", "keine Angabe"); print "Bitte einen gültigen Term angeben!\n"; $Ausfuerer{"Adresse"} = <STDIN>; #Variable eingeben lassen while ($Ausfuerer{"Addresse"} =~ /[^@]/){ #wiederhohlte Aufforderung, bis der Term passt. print "Bitte einen gültigen Term angeben!\n"; $Ausfuerer{"Adresse"} = <STDIN>;#Variable eingeben lassen }Dieses Programm soll solange nach einen gültigen Term, der ein @ enthält verlangen bis es eingegeben wurde, doch er akzeptiert jeden Term. Danke schon mal für die Hilfe! mfg Nathanel2
baba007 Geschrieben 3. Oktober 2009 Geschrieben 3. Oktober 2009 =~ heisst entspricht und du suchst !~
Nathanel2 Geschrieben 3. Oktober 2009 Autor Geschrieben 3. Oktober 2009 =~ heisst entspricht und du suchst !~Hallo und danke für deine Antwort baba007! Stimmt...den Bug hatte ich ja schon mal... Hier ist eine überarbeitete Version, die aber auch nicht funktioniert: #!/usr/bin/perl use locale; %Ausfuerer = ("Adresse", "keine Angabe"); print "Bitte einen gültigen Term angeben!\n"; $Ausfuerer{"Adresse"} = <STDIN>; #Variable eingeben lassen while ($Ausfuerer{"Addresse"} !~ /[^@]/){ #wiederhohlte Aufforderung, bis der Term passt. print "Bitte einen gültigen Term angeben!\n"; $Ausfuerer{"Adresse"} = <STDIN>;#Variable eingeben lassen }Jetzt akzeptiert das Programm den Term nie, egal,ob ein @ entahlten ist oder nicht. mfg Nathanel2
lupo49 Geschrieben 3. Oktober 2009 Geschrieben 3. Oktober 2009 (bearbeitet) Nach 10-minütigem Ausprobieren ist mir dann aufgefallen, dass du in deiner while-Kontrollabfrage das Element des Hashes falsch geschrieben hast: Adresse mit zwei 'd' anstatt mit einem. (Ich dachte zunächst dass es an den Rechtschreibfehlern im Quellcode liegt.) Und teste das mal mit folgendem: ($Ausfuerer{"Adresse"} =~ /[\w]\@[\w]/) Bearbeitet 3. Oktober 2009 von lupo49
Nathanel2 Geschrieben 3. Oktober 2009 Autor Geschrieben 3. Oktober 2009 Nach 10-minütigem Ausprobieren ist mir dann aufgefallen, dass du in deiner while-Kontrollabfrage das Element des Hashes falsch geschrieben hast: Adresse mit zwei 'd' anstatt mit einem. (Ich dachte zunächst dass es an den Rechtschreibfehlern im Quellcode liegt.) Und teste das mal mit folgendem: ($Ausfuerer{"Adresse"} =~ /[\w]\@[\w]/) Danke! Es funktioniert! Du hast mir sehr geholfen (ich habe bevor ich das hier schrieb schon 6 h lang nach dem Fehler gesucht)! Kann geclosed werden. mfg Nathanel2
baba007 Geschrieben 3. Oktober 2009 Geschrieben 3. Oktober 2009 ausserdem ist ^@ das z.b.: @TE aber nicht te@de.de
reneeb Geschrieben 4. Oktober 2009 Geschrieben 4. Oktober 2009 ausserdem ist ^@ das z.b.: @TE aber nicht te@de.de Das stimmt im ursprünglichen Kontext nicht. Denn dort stand /[^@]/ und damit ist das ^@ innerhalb einer Zeichenklasse. Dort hat das ^ die Bedeutung, dass die Zeichen der Klasse NICHT vorkommen dürfen. $Adresse =~ /[^@]/ matcht also bei Strings, die mindestens ein Zeichen enthalten, das KEIN @ ist. Das sind @TE, te@example.com, Test etc. Nur Strings, die komplett aus @ (@, @@, @@@) bestehen, matchen hier nicht.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden