Alain: nochmal zum Thema if/elsif/else

hallo,
Hab grade im Archiv danach gesucht weil ich in selfhtml nicht ganz schlau wurde :)
und ein Beispiel gefunden http://forum.de.selfhtml.org/archiv/2004/1/t69241/
meine frage zu dem beispiel:
if() {  }

elsif() {  }
elsif() {  }
elsif() {  }

else { }

beziehen sich die "elsif" nun auf die eine erste "if" abfrage oder werden die
so oder so unabhängig vom ersten if abgefragt?
Ich frage mich sowieso für was elsif denn gut sein soll?
Kann man nicht einfach
if() {  }
if() {  }
if() {  }
if() {  }
else { }

schreiben?
Grüsse
Alain

  1. Hallo Alain,

    if() {  }

    elsif() {  }
    elsif() {  }
    elsif() {  }

    else { }

    beziehen sich die "elsif" nun auf die eine erste "if" abfrage oder werden die
    so oder so unabhängig vom ersten if abgefragt?

    Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif() ausgefuehrt,
    bis auf eine Bedingung getroffen wird, die passt.

    Ich frage mich sowieso für was elsif denn gut sein soll?
    Kann man nicht einfach
    if() {  }
    if() {  }
    if() {  }
    if() {  }
    else { }

    schreiben?

    Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
    Aequivalent waere das so:

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

    Grüße,
     CK

    --
    Descartes sagte: 'Ich denke, also bin ich.' Ich hingegen sage: 'Ich denke nicht, also bin ich.'
    http://wwwtech.de/
    1. Hallo,

      Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif() ausgefuehrt,
      bis auf eine Bedingung getroffen wird, die passt.

      hmmm,komisch,so nachdem was ich gelesen habe,dachte ich eher umgekehrt,wenn das erste if fehlschlägt
      dann werden die elsif übersprungen?!

      Ich frage mich sowieso für was elsif denn gut sein soll?
      Kann man nicht einfach
      if() {  }
      if() {  }
      if() {  }
      if() {  }
      else { }

      schreiben?

      Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
      Aequivalent waere das so:

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

      und wenn man das so schreibt:

      if (){
      if () {
      if () {
      mach was
      }}}
      else {
      sonst das
      }

      ich dachte das wäre dasselbe wie elsif für die zwei unteren ifs?
      Grüsse
      Alain

      1. Hallo Alain,

        Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
        ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.

        hmmm,komisch,so nachdem was ich gelesen habe,dachte ich eher umgekehrt,wenn das erste
        if fehlschlägt dann werden die elsif übersprungen?!

        Nein.

        ckruse@skuld latex $ perl test.pl
        if
        elsif 1
        ckruse@skuld latex $ cat test.pl
        #!/usr/bin/perl -w

        if(1) {
          print "if\n";
        }
        elsif(1) {
          print "elsif 1\n";
        }
        elsif(1) {
          print "elsif 2\n";
        }
        else {
          print "else\n";
        }

        if(0) {
          print "if\n";
        }
        elsif(1) {
          print "elsif 1\n";
        }
        elsif(1) {
          print "elsif 2\n";
        }
        else {
          print "else\n";
        }

        eof

        ckruse@skuld latex $

        Aber warum probierst du das nicht einfach selber aus?

        Das ist semantisch ein Unterschied. Hier werden in jedem Fall alle if() ausgewertet.
        Aequivalent waere das so:

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

        und wenn man das so schreibt:

        if (){
        if () {
        if () {
        mach was
        }}}
        else {
        sonst das
        }

        Ist das zwar syntaktisch richtig, aber semantisch was anderes.

        ich dachte das wäre dasselbe wie elsif für die zwei unteren ifs?

        Nee.

        Grüße,
         CK

        --
        No Shoes On Mat!
        http://wwwtech.de/
        1. Hallo CK,

          Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
          ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.

          if(1) {
            print "if\n";
          }
          elsif(1) {
            print "elsif 1\n";
          }
          elsif(1) {
            print "elsif 2\n";
          }
          else {
            print "else\n";
          }

          Achso?! ich glaub ich versteh jetzt,wenn das erste if fehlschlägt,dann eines der elsif zutrifft
          wird keine weitere abfrage gemacht egal ob dann mal wieder ein if oder elsif kommt - stimmts?
          Bei if werden alle abgefragt im zweig (in Deinem beispiel oben)

          Aber warum probierst du das nicht einfach selber aus?

          hab ich ,aber werd trotzdem nicht schlau daraus :/ Ich hatte ein problem mit einem script
          wo ich mir nicht sicher war ob ich jetzt elsif oder if schreiben soll,weil ein benutzer probleme hatte damit.
          Ich hatte einige ifs drinnen,die alle nicht zutreffen durften und in dem letzteren sollte oder musste das if zutreffen.
          Das sah in etwa so aus:
          if ()
          {
          falsch
          }
          if ()
          {
          falsch
          }

          #und jetzt muss es zutreffen
          elsif (($dies eq 'richtig')and ($das eq 'richtig'))
          {
          super alles ok
          }
          else
          {
          falsch
          }

          Hab das elsif nun auf if abgeändert.
          Grüsse
          Alain

          1. Hallo Alain,

            Wenn die Bedingung im ersten if() fehlschlaegt wird der Reihe nach das elsif()
            ausgefuehrt, bis auf eine Bedingung getroffen wird, die passt.

            if(1) {
              print "if\n";
            }
            elsif(1) {
              print "elsif 1\n";
            }
            elsif(1) {
              print "elsif 2\n";
            }
            else {
              print "else\n";
            }

            Achso?! ich glaub ich versteh jetzt,wenn das erste if fehlschlägt,dann eines der
            elsif zutrifft wird keine weitere abfrage gemacht egal ob dann mal wieder ein if oder
            elsif kommt - stimmts?

            Hae? Iwo.

            if(falsch) {
             ## hier wird nicht ausgefuehrt
            }
            elsif(wahr) {
              # hier schon
            }
            elsif(wahr) {
              # hier nicht
            }
            else {
              # auch nicht
            }

            if(wahr) {
              # hier schon
            }
            elsif(wahr) {
              # hier nicht
            }
            else {
              # hier auch nicht
            }

            if(falsch) {
              # nicht ausgefuehrt
            }
            elsif(falsch) {
              # nicht ausgefuehrt
            }
            else {
              # hier wird ausgefuehrt
            }

            Grüße,
             CK

            --
            Q: God, root, what's the difference?
            A: God is merciful.
            http://wwwtech.de/
            1. Hallo CK,

              Hae? Iwo.

              if(falsch) {
               ## hier wird nicht ausgefuehrt
              }
              elsif(wahr) {
                # hier schon
              }
              elsif(wahr) {
                # hier nicht
              }
              else {
                # auch nicht
              }

              eben doch so wie ich jetzt verstanden habe :)
              also wenn eine der elsif stimmt,
              die anderen elsif,die folgen gar nicht mehr abgefragt werden.
              Naja,man könnte das trotzdem auch mit if tun und wenn eine angabe stimmt
               mit exit beenden,wär dann dasselbe.
              Jedenfalls danke für die ausführung.
              Grüsse
              vom Alain