2010-08-03 8 views
10

में केस आकार के बावजूद दो तारों की तुलना करें, चाहे केस आकार के बावजूद दो तारों की तुलना करने के लिए वैसे भी है? उदाहरणपर्ल

"steve" eq "STevE" <----- these would match 
"SHOE" eq "shoe" 

के लिए आप चित्र प्राप्त

उत्तर

16

हाँ - uc() (अपर-केस समारोह; 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";' 

$ 

आप स्पष्ट रूप से lc() रूप में अच्छी तरह उपयोग कर सकते हैं।

यदि आप वास्तविक "ईक" ऑपरेटर को असंवेदनशील होना चाहते हैं, तो अधिभार का उपयोग करना संभव हो सकता है लेकिन मुझे नहीं लगता कि आप यही पूछ रहे हैं - अगर ऐसा है तो कृपया अपने प्रश्न को स्पष्ट करें। न ही यह एक अच्छा विचार है यदि आप इसे चाहते हैं, आईएमएचओ - बहुत नाजुक और बग का पता लगाने और डीबग करने के लिए बड़ी मुश्किल हो जाती है। "I"

+0

यह काम करता है महान – shinjuo

9

तरीकों में से एक जोड़े को ऐसा करने के लिए

इसके अलावा, यह अपने विशिष्ट मामले में जहां आप बस समानता चाहते में एक overkill है, लेकिन पर्ल नियमित अभिव्यक्ति भी मामले स्वतंत्र modifyer है:

  • lc "steve" eq lc "STevE";

  • :

    lc या uc ऑपरेटर, जो दोनों तार कम या क्रमशः अपर केस में धर्मान्तरित का उपयोग करें

एक साधारण regex बस के रूप में अच्छा प्रदर्शन करेंगे: perldoc (http://perldoc.perl.org/functions/fc.html), यह उपयोग करने के लिए बेहतर है के अनुसार

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

इन महान काम – shinjuo

+0

स्मार्टमैच दस्तावेज़ों को दोबारा पढ़ें; कि आखिरी वाला किसी भी ~~ रेगेक्स मामले में पड़ रहा है जिसका अर्थ है कि बाएं साइट को स्ट्रिंग और दाएं का उपयोग करके मिलान किया गया है। 5.10.1 पर, ऐसा लगता है कि "(? I-xsm: steve)" = ~/STevE/i' जब मैं उम्मीद करता था '($ _ = ~/स्टीव/i) = ~/STevE/i ', लेकिन न तो यहां उचित है। – ysth

+0

एनबी 5.10.0 पर स्मार्टमैच में त्रुटियों को डिजाइन किया गया है (जो 5.10.1 में तय किए गए थे) और इसका उपयोग नहीं किया जाना चाहिए। – ysth

1

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

पहले उपयोग करने से पहले इस लाइन को जोड़ने के लिए मत भूलना fc की:

use feature 'fc'; 
+0

अच्छा बिंदु। असल में 'एफसी' 'uc' /' lc' के समान है लेकिन गैर-ASCII वर्णों को संभालने में सक्षम है। – PerlDuck

+0

'uc' और' lc' यूनिकोड वर्णों के साथ भी अच्छी तरह से काम करता है। –