Aquariophile: ELSIF == ELSE IF *heul*

Hallo !

Also, es ist mir klar dass ich mich nun für den vollen DAU halten werden,
vielleicht bin ich es ja auch,
aber die Frage liegt mir echt schwer im Magen....

Also:

if (...)
{
wird ausgeführt wenn die Aussage in Klammern TRUE ist
}

ELSE (...)
{
wird ausschließlich dann ausgeführt wenn die vorhergehende (??) IF
_FALSE_ war...
}

soweit alles klar

Zwischenfrage:
wenn mehrere IF vorgehen und dann eine ELSE ??
Wem gehört die else?

Weiter im Text:

wenn jede ELSIF in Perl das Selbe ist wie
ELSE IF
dann stehen da aber mehrere ELSE (mit nem IF) hintereinander.

Theoretisch wird ja jede IF und so nur dann false,
wenn das in (...) _nicht_ TRUE ist.

aber:
wie kann die ELSE _ohne_ Klammer (...) False werden,
wenn die IF nur drin sind aber dann ist das if false und nicht die Else ??

else
{
   if (...) { ... }
}

dann ist die ELSE doch noch immer ausgeführt auch wenn IF vielleicht false ist...

Also wie schaut das nun in der Praxis aus?

Frage:
Ich habe als Beispiel-Script nur zum veranschaulichen für mich ein Script gemacht
(simples Loginscript)

Es läuft zu 100% Korrekt,
das heiß wenn ich sage "bitte umändern" ist das keine fiese tour,
weil ich kann es ja eh "beweis: Script geht ja eh!"

Aber:
Ich würde den Antworter bitte das Script von dem URL den ich jetzt hereinschreibe so zu verändern,
dass _KEINE_
ELSIF mehr vorkommt,
und alles geschickt mit ELSE IF gelöst wird.

Und mitte mit #kommentarren
die auf meine obigen Fragen eingehen damit ich endlich ELSIF in Form von ELSE IF verstehe.

Danke
http://www.salonestetica.at/login.txt

LG,
Aquariophile

  1. Hallo Aquariophile,

    Aber:
    Ich würde den Antworter bitte das Script von dem URL den ich jetzt hereinschreibe so zu verändern,
    dass _KEINE_
    ELSIF mehr vorkommt,
    und alles geschickt mit ELSE IF gelöst wird.

    Und mitte mit #kommentarren
    die auf meine obigen Fragen eingehen damit ich endlich ELSIF in Form von ELSE IF verstehe.

    sonst noch Wünsche?

    Das muß genügen:

    if( foo == bar)
    {
        foobar();
    } elsif( foo < bar)
    {
        barfoo();
    }

    ist das gleiche wie:

    if( foo == bar)
    {
        foobar();
    } else {
        if( foo < bar)
        {
            barfoo();
        }
    }

    CYa
    GONZO

  2. Hallo Aquariophile,

    Zwischenfrage:
    wenn mehrere IF vorgehen und dann eine ELSE ??
    Wem gehört die else?

    wenn du mehrere If's so untereinander hast und darunter ein Else,
    so gilt dieses Else nur, wenn keine der drei anderen Bedingungen
    zutrifft.

    If (Zahl>=3)
    {
       ....
    }

    If (Zahl<=5)
    {
       ....
    }
    If (Zahl=3)
    {
       ....
    }
    Else
    {
       ....
    }

    Eine If - Anweisung [If(Benutzer="Dick")] in einer If -Anweisung ->

    If (Zahl>=3)
    {
       If (Benutzer="Dick")
       {
         ...
       }
    }

    gilt immer nur innerhalb des Abschnittes den du mit deiner
    ersten IF-Anweisung abgegrenzt hast. Sie wird logischerweise
    auch immer nur dann ausgefuehrt, wenn das Ergebnis Zahl>=3 zutrifft.

    Wenn du nun unter
       If (Benutzer="Dick")
       {
         ...
       }
    ein Else hinzufuegst, dann gehoert diese Else zu dem If(Benutzer="Dick")
    .

    Also ist dann der Wortlaut: "Wenn der Benutzer "Dick" ist dann gib ihm eine
    Diaet, (ELSE) wenn der Benutzer nicht dick ist, dann mach was
    anderes mit ihm.

    Also alles was in dem IF (Zahl>=3) Abschnitt passiert, interessiert diese
    IF(Zahl>=3) Anweisung nicht die Bohne (Sonderbefehle natuerlich ausgenommen).
    Das gilt auch fuer den darunter befindlichen Code. Hast du die If(Zahl>=3)
    einmal geschlossen, sind die Befehle die darinstehen "vergessen" und werden
    nicht mehr beruecksichtigt.

    Abschliessend die ganze Anweisung zum besseren Ueberblick:

    If(Zahl>=3)
    {                        //ANFANG IF 1

    |  If (Benutzer="Dick")                     |
     |  {                                        |
     |       //"mach Diaet!"                     |
     |  }                                        |IF und Else gehoeren
     |  Else                                     |zusammen!
     |  {                                        |Auch wenns mehrere IF
     |       //mach keine Diaet aber Sport       |sind, gilt das selbe!
     |       //oder sonstwas                     |
     |  }

    }                       //ENDE IF 1

    Hoffe das das verstaendlich war

    Gruss
    Sonia

    1. ZUSATZ-->>>

      wenn du mehrere If's so untereinander hast und darunter ein Else,
      so gilt dieses Else nur, wenn keine der drei anderen Bedingungen
      zutrifft.

      If (Zahl>=3)
      {
         ....
      }

      If (Zahl<=5)
      {
         ....
      }
      If (Zahl=3)
      {
         ....
      }
      Else
      {
         ....
      }

      Das ist nicht ganz richtig [1]...um genau zu sein ...interessiert nur die
      unterste IF-ANweisung! Bitte schnell das oben vergessen und nieeee
      wieeeder dran denken :-)) Das Else gehoert zu dem direkt darueberbefindlichen
      IF sonst nirgendwo hin.
      tse tse tse sowas noch falsch zu erzaehlen, koennt man ja denken ich
      haetts erst gestern gelernt...

      [1] DAS IST KOMPLETTER SCHWACHSINN!

      Sonia

      1. Moin,

        If (Zahl=3)
        Else

        [1] DAS IST KOMPLETTER SCHWACHSINN!

        und wuerde auch nie funktionieren. Perl ist casesensitiv....

        n.d.p.

        1. Hi,

          If (Zahl=3)
          Else

          [1] DAS IST KOMPLETTER SCHWACHSINN!

          und wuerde auch nie funktionieren. Perl ist casesensitiv....

          Hmm, weiß zwar nicht, was das jetzt mit case-sensitive zu tun haben soll, aber es würde tatsächlich nicht funktionieren, denn aus Zahl=3 macht Perl eine Zuweisung ...

          cu, Vedat

          1. Hi,

            If (Zahl=3)

            Can't modify constant item in scalar assignment at D:\schrott\fehler.pl line 4,near "3)

            Else

            Can't call method "Else" without a package or object reference at D:\schrott\fehler.pl line 8.

            und wuerde auch nie funktionieren. Perl ist casesensitiv....
            Hmm, weiß zwar nicht, was das jetzt mit case-sensitive zu tun haben soll, aber es würde tatsächlich nicht funktionieren, denn aus Zahl=3 macht Perl eine Zuweisung ...

            Die Zuweisung ist wohl das einzige, das noch akzeptiert wird, außer bei der Option -w:
            'Found = in conditional, should be == at D:\schrott\fehler.pl line 3.'

            Grüße
              Klaus

            1. *lol *lol

              If (Zahl=3)

              Can't modify constant item in scalar assignment at D:\schrott\fehler.pl line 4,near "3)

              Else

              Can't call method "Else" without a package or object reference at D:\schrott\fehler.pl line 8.

              und wuerde auch nie funktionieren. Perl ist casesensitiv....
              Hmm, weiß zwar nicht, was das jetzt mit case-sensitive zu tun haben soll, aber es würde tatsächlich nicht funktionieren, denn aus Zahl=3 macht Perl eine Zuweisung ...

              Die Zuweisung ist wohl das einzige, das noch akzeptiert wird, außer bei der Option -w:
              'Found = in conditional, should be == at D:\schrott\fehler.pl line 3.'

              *kicher* mag ja alles sein, von mir aus haette auch Banane drinstehen
              koennen *grins*
              ging doch eigentlich darum wie if ueberhaupt funktioniert-
              funktioniert das IF in perl anders? ich bin einfachmal nicht davon
              ausgegangen. Ich ging eigentlich auch nicht von Perl aus, sondern mehr
              allgemein...;-)

              Sonia

              1. Hallo Sonia,

                ging doch eigentlich darum wie if ueberhaupt funktioniert-

                Ich weiß schon. Aber ich konnte es mir nicht verkneifen, da Vedat ja meinte, der Fehler liegt bei der Zuweisung anstelle des Vergleichs.

                funktioniert das IF in perl anders?

                anders als bei welcher Programmiersprache?

                Das Einzige, das mit bei Perl aufgefallen ist, daß es 'elsif' anstelle von 'else if' in C verwendet. Aber das liegt wohl daran, daß es in Perl (im Gegensatz zu C) unbedingt notwendig ist, einen Funktionsblock zu benutzen.
                Ach ja, und dass es auch noch unless gibt, und dass man auch
                 print 'blabla' if $zahl == 3;
                verwenden kann.

                Aber sonst funktionieren Verzweigungen eigentlich immer so wie erwartet, wie das meiste bei Perl ;-)
                Näheres kann ja jeder Interessierte unter
                  perldoc perlsyn
                nachlesen.

                Grüße
                  Klaus

  3. Hi!

    Zunaechst darf ich Dir zum unverstaendlichsten Posting des Monats gratulieren. Wenn Du beim naechsten Mal Deine Frage etwas weniger konfus stellst, wird es uns leichter fallen, darauf konkret einzugehen.

    Ich denke mal, in den Antworten steht fast alles drin, was Du wissen wolltest. Nur noch zwei kleine Ergaenzungen:

    Zwischenfrage:
    wenn mehrere IF vorgehen und dann eine ELSE ??
    Wem gehört die else?

    Diese Frage stellt sich in Perl nicht, da Du hier gezwungen wirst, immer alles in geschweifte Klammern zu schreiben, und so eindeutig ist, was zu wem gehoert. (In C existiert das Problem aber tatsaechlich, und dort ist die Antwort, dass sich ein else immer auf das am naechsten vorhergehende if bezieht.)

    Theoretisch wird ja jede IF und so nur dann false,
    wenn das in (...) _nicht_ TRUE ist.

    Du sagst hier nichts anderes als FALSE = NOT(TRUE), und das ist nicht von der Hand zu weisen.

    So long