/ / Perl का उपयोग कर विभाजन करें - perl, विभाजन

पर्ल - पर्ल, विभाजन का उपयोग कर डॉट द्वारा विभाजित करें

मैंने स्प्लिट फंक्शन का इस्तेमाल दो तरीकों से किया। पहला तरीका:

my $string="chr1.txt";
my @array1=split(".",$string);
print $array1[0];

मुझे यह त्रुटि मिलती है: Use of uninitialized value in print

जब मैं दूसरे तरीके से विभाजित होता हूं, तो मुझे कोई त्रुटि नहीं होती है।

my @array1=split(/./,$string);print $array1[0];

बंटवारे का मेरा पहला तरीका केवल डॉट के लिए काम नहीं कर रहा है।

क्या कोई मुझे इसके पीछे का कारण समझा सकता है?

उत्तर:

जवाब के लिए 9 № 1

"." सिर्फ ., बच दृश्यों के साथ सावधान।

यदि आप एक डबल-उद्धृत स्ट्रिंग में एक बैकस्लैश और एक डॉट चाहते हैं, तो आपको आवश्यकता है "\."। या एकल उद्धरण का उपयोग करें: "."


जवाब के लिए 6 № 2

यदि आप केवल फाइलों को पार्स करना चाहते हैं और उनके प्रत्ययों को प्राप्त करना चाहते हैं, तो बेहतर उपयोग करें fileparse() से विधि File::Basename


जवाब के लिए 3 № 3

@Mat द्वारा दी गई जानकारी के अतिरिक्त विवरण:

में split ".", ... पहला पैरामीटर split पहले regex इंजन में पारित होने से पहले एक डबल-उद्धृत स्ट्रिंग के रूप में व्याख्या की जाती है। जैसा कि मैट ने कहा कि एक डबल-कोटेड स्ट्रिंग के अंदर ए पलायन चरित्र का अर्थ है "अगले चरित्र को शाब्दिक रूप से लें" जैसे। दोहरे उद्धरण वाले स्ट्रिंग के अंदर दोहरी उद्धरण डालने जैसी चीजों के लिए: """

तो आपका split पास हो जाता है "." पैटर्न के रूप में। एक एकल बिंदु का अर्थ है "किसी भी चरित्र पर विभाजन"। जैसा कि आप जानते हैं कि स्प्लिट पैटर्न स्वयं परिणामों का हिस्सा नहीं है। तो आपके पास परिणाम के रूप में कई खाली तार हैं।

लेकिन पहला तत्व खाली होने के बजाय अपरिभाषित क्यों है? उत्तर के लिए प्रलेखन में निहित है split: यदि आप "द्वारा दिए गए तत्वों की संख्या पर सीमा नहीं लगाते हैं split (इसका तीसरा तर्क) तब यह चुपचाप सूची के अंत से खाली परिणाम निकाल देगा। जैसा कि सभी आइटम खाली हैं सूची खाली है, इसलिए पहला तत्व मौजूद नहीं है और अपरिभाषित है।

आप इस विशेष स्निपेट के साथ अंतर देख सकते हैं:

 my @p1 = split ".", "thing";
my @p2 = split ".", "thing", -1;
print scalar(@p1), " ", scalar(@p2), "n";

यह outputs 0 6.

हालांकि, इससे निपटने के लिए "उचित" तरीका वही है जो @ soulSurfer2010 ने अपने पोस्ट में कहा है।