2010-08-03 16 views

Répondre

16

oui - utiliser uc() (fonction majuscule, voir 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";' 

$ 

Vous pouvez évidemment utiliser lc() aussi bien. Si vous voulez que l'opérateur "eq" réel soit insensible à la casse, il peut être possible d'utiliser des surcharges, mais je ne pense pas que ce soit ce que vous demandez - veuillez clarifier votre question si c'est le cas. Ce n'est pas une bonne idée si vous le voulez, à mon humble avis - trop fragile et conduit à la plus difficile possible de tracer et de déboguer les bogues.

En outre, il est un surpuissant dans votre cas précis où vous voulez juste l'égalité, mais Perl expressions régulières ont également modifyer cas indépendant « i »

+0

Cela fonctionne très bien – shinjuo

9

deux façons de le faire:

  • Utilisez l'opérateur lc ou uc, qui convertit les deux cordes respectivement inférieur ou majuscules:

    lc "steve" eq lc "STevE";

Une regex simple, fera tout aussi bien:

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

Ces grands travaux – shinjuo

+0

Relire les documents smartmatch; ce dernier tombe dans le cas Any ~~ Regex, ce qui signifie que le site de gauche est stringifié et apparié en utilisant le droit. Sur 5.10.1, il semble faire '" (? I-xsm: steve) "= ~/STevE/i' quand j'aurais attendu' '($ _ = ~/steve/i) = ~/STevE/i ', mais ni l'un ni l'autre n'est approprié ici. – ysth

+0

N.B. smartmatch sur 5.10.0 a des défauts de conception (qui ont été corrigés en 5.10.1) et ne devrait pas être utilisé. – ysth

1

Selon perldoc (http://perldoc.perl.org/functions/fc.html), il est préférable d'utiliser

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

Ne pas oublier d'ajouter cette ligne avant la première utilisation de fc:

use feature 'fc'; 
+0

Bon point. Fondamentalement 'fc' est similaire à' uc'/'lc' mais est capable de gérer les caractères non-ASCII. – PerlDuck

+0

'uc' et' lc' fonctionnent également avec les caractères Unicode. –