2010-07-01 14 views
16

में सीधे लौटाए गए सरणी में अनुक्रमणित करना इस प्रश्न को PHP के बारे में here और here दोनों के बारे में पूछा गया है, और मेरे पास पर्ल के लिए एक ही प्रश्न है। किसी फ़ंक्शन को लौटने वाले फ़ंक्शन को देखते हुए, क्या अस्थायी चर का उपयोग किए बिना तुरंत इसमें अनुक्रमणित करने का कोई तरीका है (या सबसे अच्छा तरीका क्या है)?पर्ल

उदाहरण के लिए:

my $comma_separated = "a,b,c"; 
my $a = split (/,/, $comma_separated)[0]; #not valid syntax 

मैं देख रहा हूँ क्यों दूसरी पंक्ति में सिंटैक्स अमान्य है, तो वहाँ एक रास्ता एक ही प्रभाव प्राप्त करने के लिए है, तो मैं सोच रहा हूँ पहले एक सूची में वापसी मान बताए और उस से अनुक्रमण।

उत्तर

25

बस कोष्ठक का उपयोग अपनी सूची निर्धारित करने और उसके बाद सूचकांक इसे अपने वांछित तत्व (रों) खींचने के लिए:

my $a = (split /,/, $comma_separated)[0]; 
+0

यह आसान था --- धन्यवाद। – Carl

+7

चूंकि कई मामलों में संश्लेषण फ़ंक्शन कैल्स पर वैकल्पिक होते हैं, इसलिए मैं आमतौर पर इसे 'मेरा $ x = (विभाजन /,/=> $ str) [0] ' –

+0

@ करल के रूप में लिखता हूं, जिस तरह से आप सोच सकते हैं कि 'विभाजन (...) के लिए' कोष्ठक केवल * कॉल * -> को संबोधित करते हैं, आप इन तर्कों के साथ विभाजित करना चाहते हैं। उस पर '[0]' की कमी करना थोड़ा समझ में आता है। हालांकि '(विभाजित ...)' मूल्य * वापस * पते को संबोधित करता है, जो वास्तव में आप इंडेक्स करना चाहते हैं। – Axeman

8

वैसे ही जैसे आप यह कर सकते हैं:

($a, $b, $c) = @array; 

आप ऐसा कर सकते हैं:

my($a) = split /,/, $comma_separated; 

एलएचएस (बाएं हाथ की ओर) पर my $a अदिश संदर्भ के रूप में व्यवहार किया जाता है। my($a) सूची संदर्भ है। इसकी एक एकल सूची सूची है, इसलिए यह split से लौटा पहला तत्व प्राप्त करता है।

इसमें विभाजन को ऑटो-सीमित करने का अतिरिक्त लाभ है, इसलिए $comma_separated बड़ा होने पर कोई बर्बाद काम नहीं है।

+4

पर्ल पहले से ही इस अनुकूलन को स्वचालित रूप से निष्पादित करता है। "Perldoc -f विभाजन" से: "जब किसी सूची को असाइन किया जाता है, यदि LIMIT छोड़ा जाता है, या शून्य, पर्ल अनावश्यक काम से बचने के लिए सूची में चर की संख्या से बड़ा एक LIMIT प्रदान करता है।" – Sean

+0

ओह साफ, मुझे नहीं पता था! ऐसा लगता है कि यह हमेशा किया जाता है। – Schwern