मुझे पता है, इस सवाल का 4 साल पुराना है । लेकिन मुझे YOU से बहुत रोचक मिला क्योंकि मुझे पता नहीं था कि split
ऐसा काम कर सकता है। इसलिए मैं इसे perldoc split से निकालने के साथ विस्तारित करना चाहता हूं जो नए पाठकों के लिए इस व्यवहार को समझाता है। :-)
my $str = "1:2:3:4:5";
my ($a, $b) = split /:([^:]+)$/, $str;
# Capturing everything after ':' that is not ':' and until the end of the string
# Now $a = '1:2:3:4' and $b = '5';
Perldoc से:
पद्धति शामिल समूहों पर कब्जा, तो प्रत्येक विभाजक के लिए, एक अतिरिक्त क्षेत्र प्रत्येक स्ट्रिंग एक समूह द्वारा कब्जा कर लिया के लिए (उत्पादन किया जाता है, तो क्रम में जिसमें समूहों को बैक्रेरेंस के अनुसार निर्दिष्ट किया गया है); यदि कोई समूह मेल नहीं खाता है, तो यह एक सबस्ट्रिंग के बजाय अपरिष्कृत मूल्य को कैप्चर करता है। साथ ही, ध्यान दें कि कोई भी अतिरिक्त क्षेत्र तब भी उत्पादित होता है जब कोई विभाजक होता है (यानी, जब भी कोई विभाजन होता है), और ऐसा अतिरिक्त फ़ील्ड LIMIT की ओर गिनती नहीं करता है। सूची संदर्भ में मूल्यांकन निम्न भाव पर विचार करें (प्रत्येक लौटे सूची जुड़े टिप्पणी में प्रदान की जाती है):
split(/-|,/, "1-10,20", 3)
# ('1', '10', '20')
split(/(-|,)/, "1-10,20", 3)
# ('1', '-', '10', ',', '20')
split(/-|(,)/, "1-10,20", 3)
# ('1', undef, '10', ',', '20')
split(/(-)|,/, "1-10,20", 3)
# ('1', '-', '10', undef, '20')
split(/(-)|(,)/, "1-10,20", 3)
# ('1', '-', undef, '10', undef, ',', '20')
डुप्लिकेट: http://stackoverflow.com/questions/1098295/perl-is-there-a-way-to-split-on-the-last-regex -मैच-केवल – Zaid