2016-11-22 4 views
4

In Perl, sollte man zwei Strings mit „eq“ vergleichen oder „ne“ usw.Perl vergleichen Strings mit „==“

Ich bin ein wenig der folgende Code-Schnipsel überrascht druckt „Ja“.

$str = "aJohn"; 
$x = substr($str, 1); 
if ($x == "John") { 
    print "yes\n"; 
} 

Mein Perl hat Version V5.18.4 auf Ubuntu.

Gibt es einen Fall, in dem das "==" auf zwei Strings ein anderes Ergebnis als "eq" ergibt? Danke.

+0

'$ str eq" John ";' ... '$ str ==" John ";' – stevieb

+2

Verwenden Sie immer 'use strict; Verwende Warnungen qw (alle); '! – ikegami

Antwort

12

"foo" == "bar" ist wahr. "foo" eq "bar" ist falsch.

Der Grund dafür: == ist numerische Vergleich. "foo" und "bar" werden beide numerisch zu 0 ausgewertet (wie "17foo" wertet numerisch zu 17 aus); seit 0 == 0, "foo" == "bar". Dies ist normalerweise nicht die Operation, nach der Sie suchen.

+7

Beachten Sie, dass die Verwendung von '" foo "' oder '" 17foo "' im numerischen Kontext eine Warnung erzeugt, wenn Warnungen wie gewünscht aktiviert sind. – ysth