मैं अपने घटक वर्णों में split
एक स्ट्रिंग का प्रयास कर रहा हूं।
इस प्रयोजन के लिए मैं हमेशा split(//, $str)
का उपयोग किया है के रूप में the documentation ने सुझाव दिया:
हालांकि, इस:
print join(':', split(//, 'abc')), "\n";
रिक्त स्ट्रिंग विभाजक उत्पादन का उत्पादन करने के लिए के रूप में मेल खाता है का उपयोग करता हैa:b:c
; इस प्रकार, खाली स्ट्रिंग का उपयोग एक्सपीआर को इसके घटक वर्णों की सूची में विभाजित करने के लिए किया जा सकता है।
मेरी स्क्रिप्ट में मैं पहली बार एन पात्रों या पहले length($str) - 1
वर्ण, जो भी कम हो की एक सरणी की जरूरत है। इसे प्राप्त करने के लिए, मैं split(//, $str, $n + 1)
का उपयोग करता हूं और अंतिम तत्व को त्याग देता हूं।
सिद्धांत में यह काम करना चाहिए। यदि LIMIT स्ट्रिंग लम्बाई से कम है तो सभी अतिरिक्त वर्णों को अंतिम तत्व में समूहित किया जाता है जिसे छोड़ दिया जाता है। यदि LIMIT स्ट्रिंग लंबाई से अधिक है, तो अंतिम तत्व अंतिम वर्ण है जिसे त्याग दिया जाता है।
यह वह जगह है जहां मैं किसी समस्या का सामना करता हूं।
प्रलेखन कहते हैं:
... और इनमें से प्रत्येक:
print join(':', split(//, 'abc', 3)), "\n";
print join(':', split(//, 'abc', 4)), "\n";
उत्पादनa:b:c
पैदा करता है।
लेकिन यह परिणाम मुझे नहीं मिल रहा है।
print join(':', split(//, 'abc', 1)), "\n"; # abc
print join(':', split(//, 'abc', 2)), "\n"; # a:bc
print join(':', split(//, 'abc', 3)), "\n"; # a:b:c
print join(':', split(//, 'abc', 4)), "\n"; # a:b:c:
print join(':', split(//, 'abc', 99)), "\n"; # a:b:c:
इन परिणामों सीधे दस्तावेज़ से उदाहरण खंडन: अगर LIMIT वर्णों की संख्या से अधिक है, जिसके परिणामस्वरूप सरणी हमेशा बिल्कुल एक खाली तत्व (demo) के साथ समाप्त होता है।
क्या प्रलेखन गलत है? क्या मेरा संस्करण पर्ल (v5.22.2) गलत है?
यदि इस व्यवहार से बचा नहीं जा सकता है, तो मैं अपना मूल लक्ष्य कैसे पूरा कर सकता हूं?
आप अंत में अपना खाली पैटर्न '/ (?! $) /' में बदल सकते हैं। –
ठीक है, एक वैकल्पिक तरीका 'विभाजन (//, substr ($ string, 0, $ n) हो सकता है) ' – infixed
मुझे लगता है कि दस्तावेज़ सिर्फ सादा गलत है। यदि सीमा लंबाई से अधिक है, तो अंत में शून्य चौड़ाई मैच के बाद खाली स्ट्रिंग शामिल की जानी चाहिए। – ysth