Zum Inhalt springen

Perl durchsuchen von Variablen


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

=~ 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von lupo49
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...