Alain: was ist richtig ne oder !~ und warum ?

hallo,
schwierig,schwierig das perl oder php :) ein überblick zu kriegen.

mich beschäftig diese frage warum oder was ist richtig bei
dieser kombination?

if ($ENV{'REMOTE_ADDR'} !~ /Hans/)

oder

if ($ENV{'REMOTE_ADDR'} ne /Hans/)
welches ist jetzt richtig und warum?

und könnte man einen solchen vergleich auch machen wie dieser?

if ($ENV{'REMOTE_ADDR'} ne /Fritz/)&& ($ENV{'REMOTE_ADDR'} !~ /98/)

ich meine damit verschiedene zeichen die eigentlich das gleiche bedeuten
in einer bedingung einbeziehen?
muss man das {'PATH'} erst in als scalar deklarieren?

Gruss Alain

  1. Hallo,

    if ($ENV{'REMOTE_ADDR'} !~ /Hans/)

    Das ist richtig.

    if ($ENV{'REMOTE_ADDR'} ne /Hans/)

    Das ist falsch.

    welches ist jetzt richtig und warum?

    Das eine ist ein String-Vergleich, das andere bindet eine RegEx an den String.

    und könnte man einen solchen vergleich auch machen wie dieser?

    if ($ENV{'REMOTE_ADDR'} ne /Fritz/)&& ($ENV{'REMOTE_ADDR'} !~ /98/)

    Wenn du die Klammersetzung richtig machst und statt des 'ne' (not equal)
    ein '!~' schreibst, ja.

    ich meine damit verschiedene zeichen die eigentlich das gleiche bedeuten
    in einer bedingung einbeziehen?

    Die Frage verstehe ich nicht.

    muss man das {'PATH'} erst in als scalar deklarieren?

    Die verstehe ich auch nicht.

    Gruesse,
     CK

    1. Hallo,

      hallo CK,
      danke für die auskunft.

      if ($ENV{'REMOTE_ADDR'} !~ /Hans/)

      Das ist richtig.

      heisst das also das !~ wenn er das wort hans nicht findet?
      und ne heisst also wenn das "ganze" nicht wahr ist?

      if ($ENV{'REMOTE_ADDR'} ne /Hans/)

      Das ist falsch.

      welches ist jetzt richtig und warum?

      Das eine ist ein String-Vergleich, das andere bindet eine RegEx an den String.

      und könnte man einen solchen vergleich auch machen wie dieser?

      if ($ENV{'REMOTE_ADDR'} ne /Fritz/)&& ($ENV{'REMOTE_ADDR'} !~ /98/)

      Wenn du die Klammersetzung richtig machst und statt des 'ne' (not equal)
      ein '!~' schreibst, ja.

      jau aber ich meine damit
      (($ergebniss} ne /$ergebniss2/)&& ($ENV{'REMOTE_ADDR'} !~ /98/))
      ob man "ne" und !~ verwenden darf.

      ich meine damit verschiedene zeichen die eigentlich das gleiche bedeuten
      in einer bedingung einbeziehen?

      Die Frage verstehe ich nicht.

      oben ...

      muss man das {'PATH'} erst in als scalar deklarieren?

      z.B. so
      $hans = 0;
      $hans = 1 if({'PATH'});

      Die verstehe ich auch nicht.

      gruss Alain

      Gruesse,
      CK

      1. Hoi,

        if ($ENV{'REMOTE_ADDR'} !~ /Hans/)

        Das ist richtig.
        heisst das also das !~ wenn er das wort hans nicht findet?

        Wenn der String 'Hans' nicht in $ENV{REMOTE_ADDR} enthalten ist, ist der
        Ausdruck wahr, ja.

        und ne heisst also wenn das "ganze" nicht wahr ist?

        'ne' kannst du in dem obigen Zusammenhang nicht anwenden. 'ne' erwartet einen
        String, du gibst ihm den //-Operator (der eine Abkuerzung fuer m// ist).

        und könnte man einen solchen vergleich auch machen wie dieser?

        if ($ENV{'REMOTE_ADDR'} ne /Fritz/)&& ($ENV{'REMOTE_ADDR'} !~ /98/)

        Wenn du die Klammersetzung richtig machst und statt des 'ne' (not equal)
        ein '!~' schreibst, ja.
        jau aber ich meine damit
        (($ergebniss} ne /$ergebniss2/)&& ($ENV{'REMOTE_ADDR'} !~ /98/))
        ob man "ne" und !~ verwenden darf.

        Natuerlich darf man 'ne' und '!~' mit '&&' verknuepfen. Aber 'ne' erwartet
        immer noch einen String und keinen Operator. So, wie das mit dem 'ne' da
        oben steht, wuerde der Rueckgabewert von '$_ =~ /$ergebnis2/' mit '{$ergebnis}'
        verglichen.

        muss man das {'PATH'} erst in als scalar deklarieren?
        z.B. so
        $hans = 0;
        $hans = 1 if({'PATH'});

        Du meinst IMHO '${PATH}'. Das '$' davor ist wichtig. Das ist eine schlechte
        Eigenschaft von Perl, die du nicht verwenden solltest. Benutze lieber einen
        Hash.

        Gruesse,
         CK

      2. hi!

        if ($ENV{'REMOTE_ADDR'} !~ /Hans/)
        Das ist richtig.
        heisst das also das !~ wenn er das wort hans nicht findet?
        und ne heisst also wenn das "ganze" nicht wahr ist?

        Hier ein Beispiel:

        if ($var ne "wort") { ... }

        Das bedeutet, dass $var ungleich "wort" sein muss (ne steht für "not
        equal"), damit die Bedingung erfüllt ist.

        if ($var !~ /wort/) { ... }

        Das bedeutet, dass in $var der reguläre Ausdruck /wort/ nicht vor-
        kommen darf, damit die Bedingung erfüllt ist.

        Beides kann man natürlich mischen. Man kann ja alle logischen Aus-
        drücke durch Klammern und logische Operatoren wieder miteinander
        verbinden. Beispiel:

        if ($var ne "wort" and $var !~ /test/) { ... }

        Das ist also ohne Probleme möglich.

        bye, Frank!

        1. besten dank an euch beiden,
          jetzt ist mir das klar :-)
          grüsse vom Alain