Fux: Strings vergleiche, die Sonderzeichen enthalten

Hallo zusammen,

ich stehe vor dem Problem, daß ich Strings, die eMail-Adressen (inklusive "@") enthalten, vergleichen muß.

Ich habe wenig Ahnung von Perl. Mir ist nicht klar, wie ich das bewerkstelligen könnte.

normalerweise würde ich etwas in der Art nehmen:

if index($string,$suchstring)>=0) { ...

Aber das funzt nicht, wegen dem "@".

Zusatzfrage: Wie kann ich verhindern, daß der obige Vergleich, aufgerufen mit einem leeren Suchstring ebenfalls eine Übereinstimmung ergibt?

Vielen Dank im Voraus
M.Herberg

  1. normalerweise würde ich etwas in der Art nehmen:

    if index($string,$suchstring)>=0) { ...

    Aber das funzt nicht, wegen dem "@".

    Nein, es funktioniert nicht, weil mindestens zwei Klammern fehlen.

    Perl gibt - mit passenden Einstellungen - übrigens sehr hilfreiche Diagnosemeldungen aus. Dazu muß in der #!-Zeile hinter perl ein -w stehen, das Warnings einschaltet. Außerdem sollte das strict-Pragma mit "use strict;" geladen werden. Für CGIs ist der Taint-Mode extrem sinnvoll (zusätzlich -T auf der #!-Zeile).

    Warum Dein Vergleich mit @ in Strings Probleme macht, wird Perl selbst Dir verraten.

    Zusatzfrage: Wie kann ich verhindern, daß der obige Vergleich, aufgerufen mit einem leeren Suchstring ebenfalls eine Übereinstimmung ergibt?

    Indem Du index mit den Parametern in der dokumentierten Reihenfolge aufrufst. Perl kann einige Dinge mit seiner "do what I mean"-Logik erraten, aber nicht alles.

    Alexander

  2. ich stehe vor dem Problem, daß ich Strings, die eMail-Adressen (inklusive "@") enthalten, vergleichen muß.

    Das "@" hat in Perl eine besondere Bedeutung. Willst du es so haben, wie es ist, musst du es entweder mit einem Backslash entschärfen oder in einfachen statt in doppelten Anführungszeichen notieren (siehe perldata, dort zum Thema "Interpolieren"). Im Übrigen siehe Antwort von Alexander.

    Zusatzfrage: Wie kann ich verhindern, daß der obige Vergleich, aufgerufen mit einem leeren Suchstring ebenfalls eine Übereinstimmung ergibt?

    Wozu sollte man mit einem "leeren" Suchstring suchen wollen? Ansonsten frage den Suchstring im Booleschen Kontext ab, ein leerer solcher ergibt immer "falsch" (siehe auch hierzu perldata, 2. und 3. Absatz).

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Wozu sollte man mit einem "leeren" Suchstring suchen wollen? Ansonsten frage den Suchstring im Booleschen Kontext ab, ein leerer solcher ergibt immer "falsch" (siehe auch hierzu perldata, 2. und 3. Absatz).

      Laß mich mit Code antworten:

      $ perl -e "'' or die 'das war wohl nichts'"
      das war wohl nichts at -e line 1.
      $ perl -e "'0' or die 'das war wohl nichts'"
      das war wohl nichts at -e line 1.

      Alexander

      1. Laß mich mit Code antworten:

        Jaja, die Null, wie konnte ich die nur vergessen.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.