Michael: Bei if == nicht das Selbe wie eq

Hallo zusammen,

eigentlich sollte man in Perl

if ($NextCOMMAND eq "Write")

oder alternativ

if ($NextCOMMAND == "Write")

codieren können. "==" hat bisher immer funktioniert, aber im obigen Beispiel habe ich

if ($NextCOMMAND == "Write")

codiert gehabt. Es wurden die Befehle innerhalb die geschweiften if-Klammern immer ausgeführt, auch wenn im Scalar $NextCOMMAND etwas anderes als "Write" stand. Irgend wann habe ich dann

if ($NextCOMMAND eq "Write")

codiert, dann hat es funktionier. Kann mir dieses Phänomän jemand erklären?

  1. Hi,

    eigentlich sollte man in Perl
    if ($NextCOMMAND eq "Write")

    Ja

    oder alternativ
    if ($NextCOMMAND == "Write")

    Nur wenn man einen numerischen Vergleich mit einem String für sinnvoll hält

    codieren können.
    "==" hat bisher immer funktioniert,

    Dann hattest Du wohl bisher nur numerische Vergleiche.

    aber im obigen Beispiel habe ich
    if ($NextCOMMAND == "Write")
    codiert gehabt. Es wurden die Befehle innerhalb die geschweiften if-Klammern immer ausgeführt, auch wenn im Scalar $NextCOMMAND etwas anderes als "Write" stand.

    Wieso erwartest Du etwas anderes? == führt einen numerischen Vergleich durch.

    Irgend wann habe ich dann
    if ($NextCOMMAND eq "Write")
    codiert, dann hat es funktionier.

    Mit eq werden ja auch Strings verglichen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. eigentlich sollte man in Perl

    if ($NextCOMMAND eq "Write")

    oder alternativ

    if ($NextCOMMAND == "Write")

    codieren können. "==" hat bisher immer funktioniert, aber im obigen Beispiel habe ich

    nein, sollte man nicht, das eine ist ein Stringvergleich, dass andere ein Zahlenvergleich.
    Du programmierst ohne Warnungen (vermutlich auch ohne use strict), das ist nicht empfehlenswert, da die beiden Hilfsmittel, dir viel bei der Fehlersuche helfen können.

    Zur Verdeutlichung:

    #! /usr/bin/perl -w  
    my $x = "a";  
    my $y = "A";  
      
    print $x == $y ? 'gleich' : 'ungleich';  
    print "\n";  
    print $x eq $y ? 'gleich' : 'ungleich';  
    
    

    codiert, dann hat es funktionier. Kann mir dieses Phänomän jemand erklären?

    Der Zahlenvergleich wandelt den String vermutlich in eine Zahl um

    Struppi.

    --
    Javascript ist toll (Perl auch!)