आपका कोड जब तक आप अपने सबरूटीन कॉल के सामने से $
हटाने के रूप में ठीक है। एक डॉलर चिह्न स्केलर मान दर्शाता है, और कॉल की तरह
$result1 = checkCase("Hello");
$result2 = checkCase("world");
आपका सबरूटीन भी है essarily लंबे unnec दिखना चाहिए। रेगेक्स मैच एक सच्चा/झूठा मान देता है, और आप अलग-अलग सत्य/झूठे मान 1
या 0
वापस करने के लिए उस मान का उपयोग कर रहे हैं। रेगेक्स मैच के परिणाम को सीधे वापस करने के लिए बहुत बेहतर है।
अंत में, यदि आप ASCII वर्णों के बाहर काम कर रहे हैं तो आप अपरकेस लेटर यूनिकोड श्रेणी का उपयोग करना चाहेंगे, जो \p{Lu}
का उपयोग करके एन्कोड किया गया है।
मुझे आशा है कि आपके कोड पर यह बदलाव उपयोगी होगा। मैंने subroutine का नाम थोड़ा बदल दिया है क्योंकि यह चरम और सबराउटिन पहचानकर्ताओं के लिए केवल निम्न केस अक्षरों और अंडरस्कोर का उपयोग करने के लिए मानक अभ्यास है। ऊपरी केस अक्षरों को पैकेज नामों जैसे ग्लोबल्स के लिए आरक्षित किया जाता है।
sub check_case {
$_[0] =~ /^\p{Lu}/
}
print check_case('Hello') ? 'YES' : 'NO', "\n";
print check_case('world') ? 'YES' : 'NO', "\n";
... और? यह कैसे काम नहीं कर रहा है? –
ASCII से अपरकेस अक्षर का मतलब है? या यूनिकोड अपरकेस अक्षर या अपरकेस कोडपॉइंट? – jm666