Veröffentlicht 3. Oktober 200915 j 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
3. Oktober 200915 j =~ 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
3. Oktober 200915 j 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 200915 j von lupo49
3. Oktober 200915 j 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
4. Oktober 200915 j 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.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.