Patric: Vergleich von Variablen in Perl

Hi,

Ist nicht ganz HTML, aber vielleicht kann mir ja trotzdem jemand weiterhelfen...
Bin Perl-Anfänger. Ich würde gerne ein Array von Buchstaben (@buchstaben=("A".."Z");) und
eine Variable buchstabe ($buchstabe) auf Gleichheit überprüfen.
Habe dies mit der Anweisung if($buchstaben[$index] eq $buchstabe) versucht. Das Ergebnis
der Selektion ist immer false. Meine Frage: Ist die Anweisung korrekt? Woran kann es liegen,
daß das Ergebnis immer false ist? Habe mir die Variablen anzeigen lassen. Im Fall, wo beide
auf der HTML-Seite gleich aussehen, ist das Ergebnis der Selektion false. Gibt es in Perl
eventuell Unterschiede zwischen Charakter- und String-Variablen bezüglich Ende-
Kennzeichen der Variablen (Wie in C mit '\0' für String)?
Bin kurz vor der Verzweiflung und bin für jede Hilfe wirklich sehr dankbar.

  1. Hi,

    Bin Perl-Anfänger. Ich würde gerne ein Array von Buchstaben (@buchstaben=("A".."Z");) und
    eine Variable buchstabe ($buchstabe) auf Gleichheit überprüfen.
    Habe dies mit der Anweisung if($buchstaben[$index] eq $buchstabe) versucht. Das Ergebnis
    der Selektion ist immer false. Meine Frage: Ist die Anweisung korrekt? Woran kann es liegen,

    Sieht syntaktisch korrekt aus, aber ich kenne die anderen Variablen nicht.
    Kannst du den Teil etwas genauer angeben?
    Wie ist $index definiert?

    Ciao,
    Wolfgang

    1. Sieht syntaktisch korrekt aus, aber ich kenne die anderen Variablen nicht.
      Kannst du den Teil etwas genauer angeben?
      Wie ist $index definiert?

      Ciao,

      »»  Wolfgang

      Ein Beispielübergabeparameter ist  "Sachsen/B".
      Hier der Auszug aus dem Perl-Script:

      if($ENV{'REQUEST_METHOD'} eq 'GET')
      {
      $daten = $ENV{'QUERY_STRING'};
      }
      else
      {
      read(STDIN, $daten, $ENV{'CONTENT_LENGTH'});
      }

      $div=index($daten,"/");
      $bundesland=substr($daten,0,$div);
      $buchstabe=substr($daten,$div+1);

      ...

      @buchstaben=("A".."Z");

      for($i=0;$i<26;$i++)
      {
      if($buchtabe eq $buchstaben[$i])
      {
          Diese Stelle wird nie erreicht.
              }
              else
                 ...
      }

      1. Hi,

        Ein Beispielübergabeparameter ist  "Sachsen/B".
        Hier der Auszug aus dem Perl-Script:

        if($ENV{'REQUEST_METHOD'} eq 'GET') { $daten = $ENV{'QUERY_STRING'}; }
        else  { read(STDIN, $daten, $ENV{'CONTENT_LENGTH'});  }

        Das reicht nicht! Sonderzeichen werden bei der Uebertragungs uebers Web codiert!
        Du musst noch folgendes machen (ich gehe dabei davon aus, das du nur diesen einen
        Datensatz uebertraegst und nicht noch wietere Parameter!):

        $daten =~ tr/+/ /;
        $daten =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

        $div=index($daten,"/");
        $bundesland=substr($daten,0,$div);
        $buchstabe=substr($daten,$div+1);

        Etwas umstaendlich. Besser so:
        ($bundesland, $buchstabe) = split(///,$daten,2);

        Und schoen waere auch, wenn du die Laenge von
        beiden Variablen begrenzen wuerdest.
        Sonst sickt dir mal jemand ein paar MB an das Skript und
        freut sich, das auf einmal deine Webseite ablagt.

        ...

        @buchstaben=("A".."Z");

        for($i=0;$i<26;$i++)

        Besser:
        for ($i=0; $i<=$#buchstaben; $i++) {

        {if($buchtabe eq $buchstaben[$i]) {

        »»     Diese Stelle wird nie erreicht.
        »»  } else {}
        }

        Noch besser waere es aber, du arbeitest mit Hashes oder regulaeren Ausdruecken,
        dann brauchst du diese Schleife garnicht erst.
        Wenn du z.B. einfach nur bei A-C die Subroutine abc aufrufen willst, dann z.B. so:

        if ($buchstabe =~ /[a-c]/i) { &abc; }

        Ciao,
        Wolfgang

  2. Hi Patric,

    Ich würde gerne ein Array von Buchstaben (@buchstaben=("A".."Z");) und
    eine Variable buchstabe ($buchstabe) auf Gleichheit überprüfen.

    Erstmal eine Frage: Willst Du überprüfen, ob 1) $buchstabe ein Element von @buchstagen ist, oder 2) möchtest Du nur wissen, ob ein bestimmtes Element von @buchstaben mit $buchstabe identisch ist?

    Habe dies mit der Anweisung if($buchstaben[$index] eq $buchstabe) versucht.

    Das sollte schon funktionieren, wenn Du wissen willst, ob das Element mit dem Index $index mit $buchstabe identisch ist.

    Das Ergebnis der Selektion ist immer false. Meine Frage: Ist die Anweisung korrekt?

    Was steht den in $index? Benutzt Du $index in einer Schleife?
    Falls Du jedoch den 2. Fall checken willst, hilft Dir vielleicht folgender Thread weiter: http://www.teamone.de/selfaktuell/forum/messages/66611.html

    Gruß AlexBausW

  3. Das sieht eigentlich syntaktisch korrekt aus.

    Vielleicht ein Leichtsinnsfehler ?

    Vergessen index hochzuzählen ?
    Groß / Kleinschreibung beachtet ?

    MfG

    Andreas

  4. In Perl gibt es keine solchen Unterschiede.

    Es gibt nur 3 Variablentypen:

    Skalare (Strings, und numerische Werte)
    Arrays
    Hashes (Array mit index-string statt index-zahl)

    MfG

    Andreas