2010-08-03 2 views

Antwort

16

ja - verwenden uc() (Großbuchstaben-Funktion, siehe http://perldoc.perl.org/functions/uc.html)

$ perl -e 'print uc("steve") eq uc("STevE"); print "\n";' 
1 
$ perl -e 'print uc("SHOE") eq uc("shoe"); print "\n";'   
1 
$ perl5.8 -e 'print uc("SHOE") eq uc("shoe1"); print "\n";' 

$ 

Sie offensichtlich lc() auch nutzen können.

Wenn Sie möchten, dass der tatsächliche "eq" -Operator zwischen Groß- und Kleinschreibung unterscheidet, könnte es möglich sein, Überladungen zu verwenden, aber ich denke nicht, dass Sie das wünschen. Bitte klären Sie Ihre Frage. Es ist auch keine großartige Idee, wenn Sie das wollen, IMHO - zu zerbrechlich und führt zu großen möglichen schwer zu verfolgen und Fehler zu debuggen.

Außerdem ist es zuviel des Guten in Ihrem speziellen Fall, in dem Sie nur Gleichheit wollen, aber Perl reguläre Ausdrücke haben auch Fall unabhängige modifyer „i“

+0

Dieses große Werk – shinjuo

9

Ein paar Möglichkeiten, dies zu tun:

  • Mit dem lc oder uc Operator, der beide Strings umwandelt oder oberen Gehäuse abzusenken beziehungsweise:

    lc "steve" eq lc "STevE";

Eine einfache regex wird genauso gut:

'steve' =~ /^STevE$/i; 
+0

Diese arbeiten sehr – shinjuo

+0

Lesen Sie die Smartmatch-Dokumentation erneut. der letzte Fall fällt in den Any ~~ Regex-Fall, was bedeutet, dass die linke Seite mit der rechten Seite stringifiziert und angepasst wird. Am 5.10.1 scheint es "" (? I-xsm: steve) "= ~/STevE/i zu tun, wenn ich" ($ _ = ~/steve/i) = ~/STevE/i erwartet hätte ', aber beides ist hier nicht angebracht. – ysth

+0

N.B. smartmatch on 5.10.0 hat Designfehler (die in 5.10.1 behoben wurden) und sollte nicht verwendet werden. – ysth

1

Nach Perldoc (http://perldoc.perl.org/functions/fc.html), ist es besser

verwenden
fc("steve") eq fc("STevE") 

diese Zeile nicht vor dem ersten Gebrauch hinzufügen Vergessen von fc:

use feature 'fc'; 
+0

Guter Punkt. Grundsätzlich ist 'fc' ähnlich wie 'uc' /' lc', kann aber auch Nicht-ASCII-Zeichen verarbeiten. – PerlDuck

+0

'uc' und' lc' funktionieren auch gut mit Unicode-Zeichen. –

Verwandte Themen