G. Thomas: Vergleiche von Zahlen und Buchstaben

Hi,

also langsam verzweifle ich daran...

man vergleicht Zahlen doch so:

if ($Zahl1 == $Zahl2) {}

und Buchstaben

if ($Word1 eq Word2)

ABER wie macht man es wenn man nicht weiß ob man Zahlen, Buchstaben oder alphanumerische Datensätze hat?

Situation ist folgende, ein User gibt via Formular einen Suchbegriff ein der in einer Textdatenbank gesucht wird, stimmt der Suchbegriff mit dem Wert der ersten Spalte überein wird die gesamte Zeile ausgegeben. Leider klappt das irgendwie nicht :(
Ich habe zur Zeit folgende Funktion:
if ($Line[1]=~ /[a-z]/)
{
print "$Line[1]";
if (lc($Line[1]) eq lc($Search))
   {
      $zaehler++;
   &search;
   last;    
   }
}
elsif (lc($Line[1]) == lc($Search))
  {
     $zaehler++;
  &search;
  last;    
}

Schön wärs, aber wenn ich nach Ba12bns suche findet er trotzdem irgendwelchen Schrott.

Beispiel der Datensätze (1. Spalte)
801234
803444
leer
Abv34nn3
balsdff
.
.
.

Jemand einen Vorschlag?

mfg
G. Thomas

  1. hi!

    man vergleicht Zahlen doch so:
    if ($Zahl1 == $Zahl2) {}
    und Buchstaben
    if ($Word1 eq Word2)

    "eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
    ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)

    Beispiele:
      "text" eq "text" -> 1
      "text" eq "Text" -> 0
      "text" == "text" -> 1
      "text" == "Text" -> 1

    bye, Frank!

    1. Hi Frank!

      "eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
      ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)

      Beispiele:
        "text" eq "text" -> 1
        "text" eq "Text" -> 0
        "text" == "text" -> 1
        "text" == "Text" -> 1

      Haeh? Das ist mir aber neu. Eigentlich vergleicht == numerisch und eq stringwise (case-sensitive).
      Wenn Du das da oben ausfuehrst, bekommst Du die Warnung Argument "text" isn't numeric in eq.

      Natuerlich kann man Zahlen auch mit eq vergleichen, denn sie haben ja eine Stringrepraesentation. Nur sind dann "001234" und "01234" halt veschiedene Dinge.
      Wenn man trotzdem unbedingt wissen will, ob ein Skalar eine Zahl darstellt, moege man dies mit dem Ausdurck /^\d+$/ pruefen.

      So long

    2. "eq" vergleicht Skalare case-sensitiv (achtet auf Groß- und Kleinschreibung), "==" achtet nicht darauf. Das
      ist der einzige Unterschied, der dich hier interessieren dürfte, und müsste auch deine Frage beantworten :)

      So ein Schmarrn! eq ist ein Operator zum String-Vergleich, == dagegen einer zum numerischen Vergleich. Mit Gross- und Kleinschreibung hat das nichts zu tun.

      if ('lsadhfjd' == 'hjgzgu') { # uebersetzt 0 == 0
        print 'gleich?';
      }

      Wenn ich den -w Switch setze (und das ist *sehr* ratsam), erhalte ich übrigens folgende Warnung:

      Argument "hjgzgu" isn't numeric in eq at test.pl line 3.
      Argument "lsadhfjd" isn't numeric in eq at test.pl line 3.

      Peter

      1. Hallo Peter!

        Schoen, dass Du auch eine Meinung hast, aber warum liesst Du nicht einfach erstmal den Thread durch, bevor Du anderer Leute Antworten wiederholst? Siehe auch http://www.teamone.de/selfaktuell/forum/forumsfaq_2.htm#naq6.

        So long

        1. Schoen, dass Du auch eine Meinung hast, aber warum liesst Du nicht einfach erstmal den Thread durch, bevor Du anderer Leute Antworten wiederholst? Siehe auch http://www.teamone.de/selfaktuell/forum/forumsfaq_2.htm#naq6.

          Wo war der Switch -w erwaehnt?

          Peter

          1. Wo war der Switch -w erwaehnt?

            Hehe, schoen rausgeredet. Und dafuer nochmal so ein langes Posting? Warum nur glaube ich das nicht? :-)

            So long