2011-07-18 7 views
7
#!/usr/bin/perl 
use warnings; 

my %hash=("no1"=>1, 
     "no2"=>2, 
    ); 

print %hash; #Prints no11no22 
print "%hash"; #Prints %hash 

पर्ल दोहरे उद्धरणों के भीतर हैश का इंटरपोलेशन का समर्थन क्यों नहीं करता है? यह स्केलर्स ($), सरणी (@) के लिए इंटरपोलेशन का समर्थन करता है, फिर हैश (%) के लिए क्यों नहीं?पर्ल डबल कोट्स में हैश के इंटरपोलेशन का समर्थन क्यों नहीं करता है?

+2

मुझे नहीं लगता था कि पर्ल कुकबुक स्वतंत्र रूप से उपलब्ध था, कानूनी रूप से – MkV

+0

हां, यह अवैध है। –

+2

एक वर्कअराउंड हैश को एक सरणी संदर्भ में डालना है और फिर इसे अस्वीकार करना है: 'प्रिंट करें "@ {[% हैश]}" ' – mob

उत्तर

15

हैश को कैसे स्ट्रिंग करना चाहिए? स्केलर स्पष्ट और सरणी भी हैं। लेकिन एक हैश क्या होना चाहिए? इस तरह की एक स्ट्रिंगफिकेशन कितनी उपयोगी होगी? क्या यह एक इंटरपोलिंग स्ट्रिंग में अनदेखा% वर्ण का उपयोग करने में सक्षम होने से कम या कम उपयोगी है? क्या आज के इंटरपोलेटेड तारों में% का उपयोग करने वाले सभी कोड को ठीक करने के लिए यह कितना काम करेगा?

यदि आप इन सवालों के अच्छे जवाब के साथ आ सकते हैं, तो मुझे यकीन है कि पी 5 पी उन्हें सुनना चाहेंगे।

+0

मुझे आश्चर्य नहीं है कि हैश के इंटरपोलेशन को सरणी से काफी अलग माना जाता है और है 'अनियंत्रित' माना जाता है। क्या मुझे पता चलेगा कि सरणी की स्ट्रिंग को क्यों जरूरी है और हैश की नहीं है? – Salil

+0

@ पीछे की संगतता के लिए सरणी स्ट्रिंगिफिकेशन की आवश्यकता है। अगर इसे भाषा से हटाया जा सकता है, तो शायद यह होगा। असल में, पर्ल 6 में सरणी इंटरपोलेशन नहीं है। इसमें अभिव्यक्ति इंटरपोलेशन है, जो बहुत बेहतर काम करता है: '"{@ a.join (', ')}" 'और' "{% h.perl}" ' –

21

नेथन टॉर्किंगटन को उद्धृत करने के लिए: "बड़ी समस्या यह है कि प्रिंटफ के साथ डबल-उद्धृत तारों में% का भारी उपयोग किया जाता है।" अधिक जानकारी here है।

+0

लिंक के लिए धन्यवाद। –

4

वास्तव में "क्यों" का जवाब नहीं है, लेकिन मैंने सोचा कि मैं "कैसे" के विभिन्न उत्तरों को इंगित करता हूं।

एक, ज़ाहिर है, की कोशिश कर सकते:

#!/usr/bin/perl 
use warnings; use strict; 

my %hash = (
    "no1" => 1, 
    "no2" => 2, 
); 

print "@{[ %hash ]}\n"; 

लेकिन, मैं क्या उपयोग है कि हो सकता है पता नहीं है।

आप एक हैश या किसी अन्य जटिल डेटा संरचना की सामग्री को डंप करने के लिए चाहते हैं, तो आपके उपयोग के मामले के आधार पर Data::Dumper या YAML या JSON का उपयोग करें।

+0

जांचें चास ओवेन्स के कमेन मेरे प्रश्न पर टी। –

+0

ओउप्स! मुझे उस टिप्पणी को याद आया। मुझे लगता है कि अगर मैं टिप्पणी भी याद करता हूं तो मैं इस जवाब को छोड़ने जा रहा हूं। –

+0

हां, यह अच्छा है। –

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