मैं केवल 4, 5, और टैब से अलग रिकॉर्ड के 7 वें तत्वों (माना) निकालने के लिए चाहते हैं, मैं की तरह कुछ कर सकते हैं:पर्ल में "पूंछ टुकड़ा" कैसे निर्दिष्ट करें?
my @f = (split(/\t/, $_, -1))[3, 4, 6];
लेकिन क्या होगा अगर मैं 4 तत्व और "पूंछ चाहते टुकड़ा "7 वें से सभी तत्वों को सरणी के अंत तक शामिल करता है? मुझे नहीं पता कि यह एक पंक्ति में कैसे करें। सबसे अच्छा मैं कर सकता हूँ यह है:
my @f = split(/\t/, $_, -1);
@f = @f[3, 6..$#f];
दो पंक्तियों में यह कार्रवाई करते के लिए एकमात्र कारण है, ताकि मैं दूसरी पंक्ति में $#f
निर्दिष्ट कर सकते हैं, लेकिन इस विशिष्टता का एक बड़ा डिग्री की तुलना में में निहित है जरूरत पर जोर देता कार्य; कार्य वास्तव में देखभालsplit
द्वारा लौटाए गए मान में कितने तत्व हैं। यह "सातवीं तत्व से उपलब्ध सबकुछ" जैसी कुछ निर्दिष्ट करने में सक्षम होना अच्छा होगा ... यह एक "पूंछ टुकड़ा" द्वारा मेरा मतलब है: एक टुकड़ा जहां केवल प्रारंभिक बिंदु निर्दिष्ट किया गया है, जबकि अंत बिंदु निहित छोड़ दिया गया है।
(विनिर्देश इस तरह की यूनिक्स में cut
उपयोगिता का उपयोग करता है में आम है, उदाहरण के लिए:
... | cut -f 4,7-
)
वहाँ कुछ subscripting अभिव्यक्ति है कि मैं
(split(...))
उपसूचक के लिए सीधे आवेदन कर सकते हैं है उपरोक्त कोड की अंतिम दो पंक्तियों द्वारा प्राप्त की गई एक ही पंक्ति में एक ही प्रभाव में उत्पादन करने के लिए?
संपादित करें: स्पष्ट होने के लिए, मैं जो बचने की कोशिश कर रहा हूं वह $#ARRAY
निर्माण है। मुझे पता है कि मैं हमेशा की तरह
my @f = do { my @t = split(/\t/, $_, -1); @t[3, 6..$#t] };
मेरे उत्तर का विस्तार किया। – ikegami
बहुत अच्छा विचार –
Niiiiice। मुझे कुछ अस्थायी प्रतियों से बचने के लिए '@ _' के उपयोग को पसंद है। – LeoNerd