xNeTworKx: Was führt Perl zuerst aus ?

Hallo,
ich hab eine kleine Frage über die Ausführungsreihenfolge. Ich hab unlängst ein Script gemacht, daß Vergleiche macht, genauer will ich jetzt nicht drauf eingehen, daß Problem war allerdings, daß es mir nicht alle Vergleiche markierte, obwohl es eigentlich sollte.
Ich glaube es lag an meinen Schleifen, im Moment mache ich die ganze Funktion nochmal und bin dabei die Schleifen anders zu machen, und dabei würd ich jetzt gern folgendes wissen :

foreach my $wert(@werte)   {
            if ($wert =~ /$zahl(1-6)/)   {
            ### mach dies und das
            }
            else   {
            ### mach das und jenes
            }
       }

Wird hier zuerst der $wert mit den Zahlen1-6 verglichen, bevor die foreach Schleife weitermacht, oder wird der $wert mit Zahl1 verglichen, dann macht das Script weiter und vergleicht $wert (2) mit Zahl2  ?

  1. hi!

    foreach my $wert(@werte)   {
                if ($wert =~ /$zahl(1-6)/)   {
                ### mach dies und das
                }
                else   {
                ### mach das und jenes
                }
           }
    Wird hier zuerst der $wert mit den Zahlen1-6 verglichen, bevor die
    foreach Schleife weitermacht, oder wird der $wert mit Zahl1
    verglichen, dann macht das Script weiter und vergleicht $wert (2)
    mit Zahl2  ?

    Ich kann nicht behaupten, dass ich die Frage völlig verstanden habe.

    Zuerst einmal wird $wert nacheinander mit jedem Wert aus @werte
    belegt. Diesen Wert behält es dann für den kompletten Durchlauf der
    Schleife, also hier der äußeren geschweiften Klammern.

    Die if-Anweisung wird für jeden Wert genau einmal ausgeführt. Und
    für jeden Wert wird die Bedingung innerhalb der runden Klammern
    überprüft.

    Die Überprüfung ist hier ein regulärer Ausdruck. Und zwar wird hier
    überprüft, ob $wert an irgendeiner Stelle mit dem Inhalt von $zahl
    übereinstimmt und danach der String "1-6" folgt. Runde Klammern in
    regulären Ausdrücken dienen zum Gruppieren.

    Und mit diesem Grundwissen kannst du ja jetzt nochmal versuchen,
    deine Frage verständlich zu formulieren... :)

    bye, Frank!

    1. hi!

      Moin!

      Ich kann nicht behaupten, dass ich die Frage völlig verstanden habe.

      Ich auch nicht. :)

      Und mit diesem Grundwissen kannst du ja jetzt nochmal versuchen,
      deine Frage verständlich zu formulieren... :)

      Du hättest aber wirklich auf die ECKIGEN KLAMMERN hinweisen können.

      Mehr zu regulären Ausdrücken: http://www.phy.uni-bayreuth.de/~btpa25/perl/regexp_1.html

      - Sven Rautenberg

      1. Hi,

        achso $zahl1 - $zahl6 ist also $zahl[1-6] :-)

    2. Hallo,

      foreach my $wert(@werte)   {
                  if ($wert =~ /$zahl(1-6)/)   {
                  ### mach dies und das
                  }
                  else   {
                  ### mach das und jenes
                  }
             }

      Ich gehe alle Stellen in @werte durch. So jetzt bin ich angenommen auf Stelle 1. Meine Frage nun, hat die Schleife $wert (1) mit den Zahlen $zahl1 $zahl2 $zahl3 $zahl4 $zahl5 $zahl6 verglichen bevor der $wert 2 wird, also bevor $wert an die nächste Stelle im Array springt ?

  2. Hallo,

    foreach my $wert(@werte)   {
                if ($wert =~ /$zahl(1-6)/)   {
                ### mach dies und das
                }
                else   {
                ### mach das und jenes
                }
           }

    So wie ich das sehe, 'verwirrt'

    if ($wert =~ /$zahl(1-6)/)   {

    ein bißchen. Das verwendest Du wohl nicht so in dieser Form, um $wert mit den Inhalten von $zahl1 bis $zahl6 zu vergleichen,  oder? Weil dann ist es kein Wunder, daß es nicht funktioniert.
    Wenn ich das mal außer acht lasse[1], dann wird an und für sich schon so gemacht, daß zuerst $wert[0] mit der angegebenen[2] Regex verglichen wird, dann $wert[1] usw.

    Grüße
      Klaus

    [1] ... mir irgendwie aber bewußt bin, daß wahrscheinlich da der 'Hund begraben' liegt.
    [2] Als ich noch in der Maschinenbaubranche war, und CAD in Österreich bzw. Europa noch kein Thema war, war das Wort 'angegebenen' jedes Mal eine Herausforderung. Nämlich dann, wenn es mit einer Normschablone auf eine Zeichnung 'gepinselt' werden mußte. Also praktisch auf jeder Zeichnung;-)

  3. Sup!

    nt = no text

    Bio