2012-12-17 12 views
6

मैं इस लाइन में पेर्ल मॉड्यूल में कई बार आया था लेकिन मुझे यह पता नहीं लगा सका कि इसका क्या अर्थ है।

my ($self, %myInputs) = @_; 

कृपया मुझे बयान समझाएं ताकि मैं आगे बढ़ सकूं।

उत्तर

8

मुझे लगता है कि क्लास विधि फ़ंक्शन में पहली पंक्तियों में से एक है। यही कारण है कि लाइन @_ जो list of the function arguements है पार्स करता है, और पहले परम जो हमेशा $self में वस्तु करने के लिए एक संदर्भ है और एक हैश%myInputs में उनमें से बाकी के अर्क निकाल लेता है। यह बिल्कुल मानता है कि समारोह में हैश प्रारूप में बहस के साथ कहा जाता है, की तरह पर्ल/टी के समारोह नीचे

$mw->Button(-text => "RIGHT", -command => sub { exit }) 
    ->pack(-side => 'right', -fill => 'both'); 
6

मेरी ($ स्वयं,% myInputs) = @_;

सभी कार्यों को पहला तर्क $self प्राप्त नहीं होता है। असल में, सम्मेलन द्वारा, केवल तीर ऑपरेटर का उपयोग करके आमंत्रित किए गए लोग -> करते हैं; -> के साथ आविष्कार करने से वस्तु का जिक्र करते हुए एक विशेष तर्क भेजता है। पर्ल में सभी फ़ंक्शंस और विधियां उसी तरह घोषित की जाती हैं (कीवर्ड sub का उपयोग करके)। केवल आमंत्रण यह निर्धारित करता है कि फ़ंक्शन एक विधि है या नहीं।

my ($foo, $bar) = ($x, $y); को समांतर असाइनमेंट कहा जाता है। यह सब कुछ चल रहा है!

पर्ल में एक सरणी से एक हैश को प्रारंभ किया जा सकता है।

my @foo = qw/ foo bar baz quz /; 
my %hash = @foo; 
print $hash{foo}; # outputs bar 

क्योंकि आप हैश %myInputs को बताए रहे हैं, हैश स्पष्ट सभी आदानों कि नहीं परोक्ष भेजा (क्योंकि आप $self में बंद खींच रहे है कि एक) कर रहे हैं असाइन किया गया है। लेकिन सावधान रहें, यह सही अधिकार करने के लिए ज्यादा समझ में नहीं आता है?

my @foo = qw/ foo bar baz /; 
my %hash = @foo; 
print $hash{baz} # what is this set too?? 

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

+0

लेकिन $ स्वयं का उपयोग कर की जरूरत क्या है में चर $ के तर्क का प्रतिनिधित्व करते हैं! यह सिर्फ मुझे इतना भ्रमित करता है! – user1855888

+1

@ user1855888 '$ self' उस ऑब्जेक्ट को संदर्भित करता है जिसे आप कॉल कर रहे हैं। आप 'मेरी $ एक पशु> new', फोन और फिर आप को कॉल करते हैं' $ a-> '$ self' (पहला तर्क) run' तो' उप रन के अंदर {} '' $ A' पर सेट किया जाएगा। अन्य भाषाओं में आप इसे 'यह' कहते हैं। यदि आप इसका उपयोग कर रहे हैं, तो आप इसे '$ this'' पर भी कॉल कर सकते हैं, 'मेरा $ यह = शिफ्ट' (हालांकि यह सम्मेलन के खिलाफ है)। –

1

पर्ल @_; में एक वैश्विक सरणी विशेष चर

@ARGV के रूप में इसी प्रकार के सरणी स्क्रिप्ट के इरादे से कमांड लाइन तर्क होते हैं।

तो my ($self, %myInputs) = @_;

@_ में हैश-चर %

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