2011-11-07 17 views
9

इस कोड पर विचार करें:मैं एक सरणी संदर्भ में फ़ंक्शन (जैसे विभाजन) से लौटाए गए सरणी को कैसे बदलूं?

@tmp = split(/\s+/, "apple banana cherry"); 
$aref = \@tmp; 

असजीला होने के अलावा, ऊपर कोड नाजुक है। मैं इस लाइन के साथ इसे का पालन कहते हैं:

@tmp = split(/\s+/, "dumpling eclair fudge"); 

अब $$aref[1] "केला" के बजाय कि "Eclair"।

मैं अस्थायी चर के उपयोग से कैसे बच सकता हूं?

वैचारिक रूप से, मैं

की तरह कुछ के बारे में सोच रहा हूँ
$aref = \@{split(/\s+/, "apple banana cherry")}; 
+4

फ़ंक्शन एरे वापस नहीं कर सकते हैं। 'विभाजित' किसी भी उप की तरह, स्केलर की एक सूची देता है। – ikegami

उत्तर

19

आप ऐसा कर सकता है अगर आप एक सरणी-रेफरी हैं:

my $aref = [ split(/\s+/, "apple banana cherry") ]; 
3

मैं यह पता लगा:

$aref = [split(/\s+/, "apple banana cherry")]; 
2

जबकि मुझे एमयू का जवाब पसंद है (और पहले उस दृष्टिकोण का उपयोग करेगा), ध्यान रखें कि चर आसानी से स्कॉप्ड किया जा सकता है, यहां तक ​​कि साथ भी कार्यों के उपयोग के केन्द्र शासित प्रदेशों, कल्पना:

my $aref = do { 
    my @temp = split(/\s+/, "apple banana cherry"); 
    \@temp; 
}; 
print join("-", @$aref), "\n"; 
# with warnings: Name "main::temp" used only once: possible typo at ... 
# with strict: Global symbol "@temp" requires explicit package name at ... 
print join("-", @temp), "\n"; 

मुबारक कोडिंग।

संबंधित मुद्दे