2011-12-22 12 views
6

मैं पर चेतावनी सख्त मिल गया है और, लेकिन यह निम्न पंक्ति के प्रारंभ के बारे में शिकायत रहती है:पर्ल: मैं एक नए हैश में खाली सरणी रेफरी कैसे घोषित करूं?

$hash{$key} = ($row, [], [], [], ''); 

ऐसा नहीं है कि एक लाइन के लिए चेतावनी देते हैं:

"Useless use of private variable in void context" 

"Useless use of anonymous list ([]) in void context" (3 times) 

मैं में डेटा भरने कर रहा हूँ बाद में, लेकिन मैं इंडेक्स 1, 2, 3 सरणी संदर्भों के लिए चाहता हूं, और इंडेक्स 4 स्ट्रिंग होने के लिए चाहता हूं। मैं तो जैसे तक पहुँचने कर रहा हूँ और भरने डेटा:

$hash{$key}->[1]->[3] = 'Data'; 
$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

जाहिर है, मैंने कुछ गलत कर रहा हूँ, लेकिन मैं वास्तव में यकीन है कि कैसे यह सही बनाने के लिए नहीं कर रहा हूँ। (साथ ही, मुझे पता है कि आखिरी पंक्ति अनावश्यक है, क्या इसे एक अच्छे तरीके से भी समझा जा सकता है?)

उत्तर

12

हैश के तत्व केवल स्केलर हो सकते हैं, इसलिए आपको अज्ञात का उपयोग करने के लिए अपना असाइनमेंट बदलना होगा कोष्ठक के बजाय सरणी निर्माता:

$hash{$key} = [$row, [], [], [], '']; 

अधिक जानकारी के लिए perldsc देखें।

लाइन:

$hash{$key}->[4] = $hash{$key}->[4] . 'More Data'; 

लिखा जा सकता है:

$hash{$key}->[4] .= 'More Data'; 

और अंत में, जब तक आप उन्हें पसंद है, -> वर्ण, सबस्क्रिप्ट सीमांकक के बीच निहित हैं, इसलिए $hash{$key}->[1]->[3]$hash{$key}[1][3] वही अर्थ है

3

मुझे पूरा यकीन नहीं है कि आप क्या करने का प्रयास कर रहे हैं, लेकिन यदि आप एक स्केलर मान को सरणी असाइन करना चाहते हैं, आप एक गुमनाम सरणी बनाएं उपयोग करने की आवश्यकता:

$hash{$key} = [$row, [], [], [], '']; 

आपके मामले में, क्या आप इस प्रकार करने के लिए व्याख्या की है प्रयास कर रहे हैं:

$row, [], [], []; 
$hash{$key} = ''; 

क्योंकि आप एक के लिए मानों की सूची असाइन नहीं कर सकते स्केलर (एकल मान चर)। जैसा कि हमने उपरोक्त किया था, वैसे ही, संदर्भ को अज्ञात सरणी पर स्केलर के मानों की एक सूची निर्दिष्ट कर सकते हैं।

2

आपको लगभग यह मिला।

याद रखें कि प्रत्येक हैश और सरणी मान एक स्केलर होना चाहिए, इसलिए यदि आप सरणी के हैश चाहते हैं, तो आपको अपनी हैश कुंजी के लिए एक सरणी संदर्भ असाइन करना होगा। तो:

$hash{$key} = [ $row, [], [], [], '' ]; 

वह है जो आप चाहते हैं।

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