के रूप में लिखा जा सकता है
कई लोगों के पास अल है यहां दिए गए सही उत्तर तैयार हैं। मैं एक उदाहरण जोड़ना चाहता था जो मुझे रोशनी मिली। अधिक जानकारी के लिए आप perldoc perlref में प्रलेखन पढ़ सकते हैं।
आपकी समस्या अस्पष्टता में से एक है, तो आप दो आपरेशन $$
और [0]
एक ही पहचानकर्ता _
पर काम कर रहा है, और परिणाम पर निर्भर करता है आपरेशन पहले किया जाता है। हम समर्थन घुंघराले ब्रेसिज़ ${ ... }
का उपयोग कर इसे कम अस्पष्ट बना सकते हैं। $$_[0]
(एक इंसान वैसे भी के लिए) संभवतः अर्थ हो सकता है:
${$$_}[0]
- अदिश $_
भिन्नता है, तो इसके पहले तत्व ले लो।
${$_[0]}
- सरणी सरणी @_
के तत्व ले लो और इसे कम करें।
जैसा कि आप देख सकते हैं, इन दो मामलों में पूरी तरह से भिन्न चर, @_
और $_
का संदर्भ मिलता है।
बेशक, पर्ल के लिए यह संदिग्ध नहीं है, हमें बस पहला विकल्प मिलता है, क्योंकि मुख्य लुकअप से पहले डीरफ्रेंसिंग किया जाता है। हमें इस ड्रेफ्रेंसिंग को ओवरराइड करने के लिए समर्थन घुंघराले ब्रेसिज़ की आवश्यकता है, और यही कारण है कि आपका उदाहरण समर्थन ब्रेसिज़ के बिना "काम" नहीं करता है।
आप अपने सबराउटिन के लिए थोड़ा कम भ्रमित कार्यक्षमता पर विचार कर सकते हैं। एक बार में दो बातें करते हैं की कोशिश कर के बजाय (तर्क और यह भिन्नता मिल), तो आपको दो चरणों में यह कर सकते हैं:
sub foo {
my $n = shift;
print $$n;
}
यहाँ, हम shift
साथ @_
बंद पहला तर्क ले, और फिर इसे भिन्नता। स्वच्छ और सरल।
अक्सर, आप स्केलर चर के संदर्भों का उपयोग नहीं करेंगे, हालांकि। और उन मामलों में, आप तीर ऑपरेटर ->
my @array = (1,2,3);
foo(\@array);
sub foo {
my $aref = shift;
print $aref->[0];
}
मैं तीर ऑपरेटर का उपयोग मिल $$
वाक्य रचना के लिए बेहतर होगा करने के लिए का उपयोग कर सकते हैं।