Wie vergleiche ich zwei Zeichenfolgen in Perl?
Ich lerne Perl, ich hatte diese grundlegende Frage hier auf StackOverflow nachgeschlagen und fand keine gute Antwort, also dachte ich, ich würde fragen.
Wie vergleiche ich zwei Zeichenfolgen in Perl?
Ich lerne Perl, ich hatte diese grundlegende Frage hier auf StackOverflow nachgeschlagen und fand keine gute Antwort, also dachte ich, ich würde fragen.
Antworten:
Siehe Perldoc Perlop . Verwenden Sie
lt
,gt
,eq
,ne
, undcmp
als geeignet für String - Vergleiche:quelle
index
zu sehen, ob eine Zeichenfolge eine Teilzeichenfolge einer anderen ist.!=
undne
sind nicht gleich, weil!=
undne
als unterschiedlich definiert sind. Wie schwer ist das?!!=
Konvertiert als numerischer Vergleichsoperator beide Operanden in Zahlenperl -E 'say "equal" if not "a" != "b"'
.cmp
Vergleichen Sieeq
Gleichne
Nicht gleichzusetzen mitlt
Weniger alsle
Gleich oder kleiner alsgt
Größer alsge
Größer als oder gleich wieSiehe
perldoc perlop
für weitere Informationen.(Ich vereinfache dies ein wenig, gebe aber
cmp
einen Wert zurück, der sowohl eine leere Zeichenfolge als auch einen numerischen Nullwert anstelle von0
und einen Wert ist, der sowohl die Zeichenfolge'1'
als auch den numerischen Wert ist1
. Dies sind die gleichen Werte, die Sie verwenden werden Immer von booleschen Operatoren in Perl erhalten. Sie sollten wirklich nur die Rückgabewerte für boolesche oder numerische Operationen verwenden. In diesem Fall spielt der Unterschied keine Rolle.)quelle
eq
,gt
,lt
etc. sind nicht richtig ... Sie kehren wahr oder falsch. Nurcmp
gibt bestimmte numerische Werte.leg
stattdessencmp
für generische Vergleiche verwendet werden.Zusätzlich zu Sinan Ünürs umfassender Liste von String-Vergleichsoperatoren fügt Perl 5.10 den Smart Match-Operator hinzu.
Der Smart Match-Operator vergleicht zwei Elemente anhand ihres Typs. In der folgenden Tabelle finden Sie das Verhalten von 5.10 (ich glaube, dieses Verhalten ändert sich in 5.10.1 geringfügig):
perldoc perlsyn
"Smart Matching im Detail" :quelle
Perl verfügt über separate Zeichenfolgenvergleichs- und numerische Vergleichsoperatoren, um die lose Eingabe in der Sprache zu erleichtern. Sie sollten Perlop für alle verschiedenen Operatoren lesen .
quelle
Der offensichtliche Untertext dieser Frage lautet:
Perl hat keine unterschiedlichen Datentypen für Text oder Zahlen. Sie werden beide durch den Typ "Skalar" dargestellt . Anders ausgedrückt, Zeichenfolgen sind Zahlen, wenn Sie sie als solche verwenden .
Da Text und Zahlen nicht durch die Sprache unterschieden werden, können wir den
==
Operator nicht einfach überladen , um in beiden Fällen das Richtige zu tun. Daher bietet Perl die Möglichkeiteq
, Werte als Text zu vergleichen:Zusamenfassend:
==
oder!=
, um zwei Operanden als Zahlen zu vergleicheneq
oderne
, um zwei Operanden als Text zu vergleichenEs gibt viele andere Funktionen und Operatoren, mit denen Skalarwerte verglichen werden können. Die Unterscheidung zwischen diesen beiden Formen ist jedoch ein wichtiger erster Schritt.
quelle
Und wenn Sie die Unterschiede zwischen den beiden Zeichenfolgen extrahieren möchten, können Sie String :: Diff verwenden .
quelle