Vergleich von Variablen in Perl
Patric
0 Wolfgang Wiese0 Patric
0 AlexBausW0 Andreas0 Andreas
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.
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
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
...
}
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
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
Das sieht eigentlich syntaktisch korrekt aus.
Vielleicht ein Leichtsinnsfehler ?
Vergessen index hochzuzählen ?
Groß / Kleinschreibung beachtet ?
MfG
Andreas
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