2012-06-20 33 views
5


का उपयोग कर पर्ल में संदर्भ द्वारा सबरूटीन्स बुला समस्याएं, तुम इतनी तरह संदर्भ (या नाम) द्वारा एक समारोह कॉल कर सकते हैं:पर्ल: एक हैश मान

my $functionName = 'someFunction'; 
    &$functionName(); 

    #someFunction defined here: 
    sub someFunction { print "Hello World!"; } 

मुझे क्या करना कोशिश कर रहा हूँ इस्तेमाल होता है एक हैश से है, तो जैसे एक मूल्य: और

my %hash = (
     functionName => 'someFunction', 
    ); 

    &$hash{functionName}(); 

    #someFunction defined here: 
    sub someFunction { print "Hello World!"; } 

त्रुटि मैं वैश्विक प्रतीक "$ हैश" स्पष्ट पैकेज नाम की आवश्यकता है।

मेरा प्रश्न है: क्या मध्यवर्ती चर का उपयोग किए बिना ऐसा करने का कोई सही तरीका है?
इस पर किसी भी मदद की सराहना की जाएगी!

+3

आप 'मेरा% हैश = (फ़ंक्शन => \ और कुछ फ़ंक्शन) भी कर सकते हैं, जिसके लिए' कोई स्टिक 'की आवश्यकता नहीं है टी 'रेफरी'। – TLP

+0

@ टीएलपी +1, मैं * उत्तर * पर जा रहा था। 'सख्त उपयोग करें;' ** बचाता है ** बहुत परेशानी ... – Dallaylaen

+0

मैं इसका उपयोग करने में सक्षम हूं, लेकिन यह कुछ हद तक अपठनीय कोड (अभी के लिए) जोड़ता है ... मैं गतिशील रूप से रनटाइम पर फ़ंक्शननाम का मान सेट कर रहा हूं और एक समारोह को इसके नाम से बुलाओ। पर्ल बहुत मजेदार है! – Thumper

उत्तर

12

यह केवल एक प्राथमिकता मुद्दा है जिसे कर्ली को छोड़कर हल किया जा सकता है। आप

&{ $hash{functionName} }() 

इस्तेमाल कर सकते हैं या फिर वैकल्पिक सिंटैक्स का उपयोग करें:

$hash{functionName}->() 

अनुक्रमित के बीच के रूप में, -> छोड़ा जा सकता है (लेकिन मैं इसे यहाँ छोड़ नहीं है):

$hash{functionName}() 

रेफरी: Deferencing Syntax

+0

वाह, यह पहला प्रश्न है जिसे मैंने कभी यहां पूछा है, और लंबे इंतजार की उम्मीद कर रहा था। आपको बहुत - बहुत धन्यवाद! मैंने आपके द्वारा पोस्ट किए गए पहले समाधान का उपयोग करके समाप्त कर दिया। ग्रेट सामान! बहुत बहुत धन्यवाद। – Thumper

+0

इसके अलावा, मैं उल्लेख करना भूल गया कि मैं पर्ल (शायद अनुभव का एक महीना) के लिए बिल्कुल नया हूं, इसलिए यह वास्तव में मेरे व्यावसायिक विकास में मदद करेगा। – Thumper

+1

मैं थोड़ा आश्चर्यचकित हूं क्योंकि अधिकांश लोगों को तीर नोटेशन सबसे अधिक पठनीय लगता है, लेकिन दोनों स्वीकार्य हैं। – ikegami