2013-06-15 11 views
7

के बजाय हेक्स नंबर के बाद टाइप को वापस कर रहा है, संक्षेप में, मैं एक सरणी लेना चाहता हूं और एक नई स्ट्रिंग से अलग किए गए सरणी के तत्वों के साथ एक स्ट्रिंग बनाना चाहता हूं।जॉइन() फ़ंक्शन एक प्रकार के कंटेंट स्ट्रिंग

मेरे पास $zones नामक एक सरणी है। $zones के संदर्भ को आउटपुट करने से यह पुष्टि होती है कि यह एक सरणी है।

निम्नलिखित कोड: निम्नलिखित उत्पादन

[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = [ 
      'fake.com25', 
      'fake.com2', 
      'fake.com27', 
      'fake.com43', 
      'fake.com41', 
      'fake.com40', 
      'fake.com39', 
      'fake.com37', 
      'fake.com36', 
      'fake.com35', 
      'fake.com31', 
      'fake.com56', 
      'fake.com55', 
      'fake.com54', 
      'fake.com53', 
      'fake.com52', 
      'fake.com51', 
      'fake.com50', 
      'fake.com49', 
      'fake.com48', 
      'fake.com42', 
      'fake.com38', 
      'fake.com34', 
      'fake.com33', 
      'fake.com32', 
      'fake.com30', 
      'fake.com29', 
      'fake.com28', 
      'fake.com26', 
      'fake.com24', 
      'fake.com23', 
      'fake.com69', 
      'fake.com68', 
      'fake.com67', 
      'fake.com66', 
      '0', 
      'fake.com44', 
      'fake.com45', 
      'fake.com46', 
      'fake.com278' 
     ]; 

[2013-06-15 16:23:29 -0500] info [dnsadmin] ------- 
[2013-06-15 16:23:29 -0500] info [dnsadmin] $VAR1 = 'ARRAY(0x170cf0d8)'; 

में

print_log(Dumper($zones)); 
print_log('-------'); 
print_log(Dumper(join("\n",$zones))); 

परिणाम मैं वास्तव में इस सरणी मैन्युअल रूप से अधिक पाश करने के लिए नहीं करना चाहती। क्या कोई बता सकता है कि join() फ़ंक्शन एक हेक्स नंबर के साथ प्रकार का नाम क्यों लौट रहा है?

उत्तर

10

उपयोगकर्ता 1 9 8371 9 8 द्वारा अच्छी तरह से समझाया गया है, लेकिन यह इस तरह से क्यों काम करता है?

यह सरल है:

$zones एक सरणी नहीं है। यह एक सरणी संदर्भ है।

join सूचियों पर काम करता है। तो अगर आप कार्य करें:

join("\n",$zones) 

आप अनिवार्य रूप से एक एकल तत्व सूची पर join बुला रहे हैं। और तत्व एक संदर्भ है, जो ARRAY(0x170cf0d8) को स्ट्रिंग करने के लिए होता है।

इसे सही ढंग से काम करते हैं तो आप इसे भिन्नता है, और यह असली डेटाप्रकार (@ या %, या कुछ मामलों $ में) के साथ लगाकर द्वारा किया जाता है बनाने के लिए।

यह इस तरह लिखा जा सकता है: @$zones, या (कुछ, मुझे शामिल है, कहें कि यह अधिक पठनीय है): @{ $zones }

यह महत्वपूर्ण है जब आप नेस्टेड संरचनाएं कर रहे हों, क्योंकि जब आप एक चर के रूप में सादे सरणी कर सकते हैं, जब आप नेस्टेड डेटा संरचनाओं से निपट रहे हैं, तो यह हमेशा संदर्भ होता है।

+1

मैंने इसे उत्तर के रूप में चिह्नित किया है क्योंकि यह समझाया गया है कि यह क्यों काम करता है। मुझे नहीं पता था कि पीआरएल के संदर्भों का विचार था, इसलिए यह स्पष्टीकरण मेरे लिए बहुत मूल्यवान था। – Fred

5

$zones सरणी संदर्भ है और पहले अधिक जानकारी के लिए @

print_log(Dumper(join("\n",@$zones))); 

साथ अदिश $zones लगाकर द्वारा आप इसे भिन्नता के लिए है सरणी मूल्यों शामिल होने के लिए वहाँ संदर्भों पर संक्षिप्त ट्यूटोरियल है : http://perldoc.perl.org/perlreftut.html#NAME

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