Cheatah: if schleife die nicht macht was ich will !!!

Beitrag lesen

Hi,

vielleicht könnt ihr mir ja erklären warum diese schleife nicht das macht was sie soll:

weil sie suboptimal ist.

read (STDIN, $auswahl, $ENV{'CONTENT_LENGTH'});
%auswahl = &CGIDA ($auswahl);

Wech damit.

use CGI ':standard';
my $datum = param('datum');

Damit sparst Du Dir auch die while-Schleife.

while (($temp2, $temp1) = each %auswahl)

Hast Du testweise mal $temp2, $temp1 ausgegeben?

{
        if ($temp1 =~m/\d{2}.\d{2}.\d{2}/g)

Das /g ist übrigens überflüssig.

{
            $temp = $temp1;
        }
        else
        {
            die "Kein Datum eingegeben"
        }

Tja. Wenn man mal einfach davon ausgeht, daß der erste Schritt in while den else-Teil anspricht (ansonsten tut es halt der zweite oder dritte), läßt sich die Schleife reduzieren auf:

while (...) {
  die "Kein Datum eingegeben"
}

Wunderst Du Dich noch immer, daß sie abbricht? ;-)

IF das suchmuster wahr zurück liefert soll er temp1 zu temp machen. (muss ich das überhaupt so umständlich lösen???)

Was ist daran umständlich? Aber okay, nimm einfach

my $temp = ($temp1 =~ /\d.../) ? $temp1 : '';

Und das ist schon die ausführliche Variante :-)

ELSE soll er das programm sterben lassen.

Jepp. Bei _jedem_ Eingabepaar. Es muß also _überall_ ein Datum eingegeben sein, wobei in Deiner Variante nur das letzte Datum gespeichert ist.

folgende ergebnisse:

Wenn's klappt, hast Du z.B. "Ich habe am 17.09.1974 Geburtstag." in $temp stehen.

(nur mit dem {2} kommt er nicht klar als ich einmal 4 stelliges jahr eingegeben habe kam das datum auch raus.

\d{2,4} (erlaubt allerdings auch "347")
\d{2}\d{2}?

allerdings laesst er keine Buchstaben zu dann ist $temp leer)

Doch doch, er erlaubt Buchstaben. Nur eben nicht innerhalb des Datums.

$temp1 ist leer (ähm wie kann dann $temp das datum zurück liefern? eins der mysterien die ich nicht verstehe)

$temp1 ist das letzte aus dem %Hash, $temp das letzte gefundene Datum.

$err die variable die ich vor dem die befehl benutzt habe wurde jedesmal mit ausgegeben ob if nun wahr war oder nicht. demnach bricht das prog jetzt auch an dieser stelle ab. und wie kann er sowohl $temp (also if=wahr) als auch $err (also if=unwahr)ausgeben.

Es war einfach zu verschiedenen Zeitpunkten :-)

vielleicht hab ich ja noch nicht die grundlegende funktion einer solchen schleife kapiert!!!!

Scheint so *g*
Jede Schleife wird solange durchlaufen, bis sie abbricht. Sei es durch "die" oder durch die definierte Abbruchbedingung. Variablen haben den Zustand der letztgemachten Änderung.

Noch Fragen, Kienzle? :-)

Cheatah