2011-12-16 22 views
6

एक डाउनलोड पर्ल मॉड्यूल पढ़ने के दौरान, मुझे इनपुट पैरामीटर को परिभाषित करने के कई तरीके मिले, जो निम्नानुसार सूचीबद्ध हैं। उनके बीच मतभेद क्या हैं?पर्ल में पैरामीटर इनपुट तंत्र के बीच अंतर क्या हैं?

sub new{ 
    my $class = shift; 
    my $self = {@_}; 
    bless{$self, $class}; 
} 

sub count1{ 
    my ($self, $lab1) = @_; 
} 

sub new1{ 
    my ($class, $lab1) = @_; 
    my $self = {}; 
    bless $class, $self; 
} 

sub setpath{ 
    my $self = shift; 
} 

उत्तर

4

जब एक सबराउटिन कहा जाता है, तो पास पैरामीटर को विशेष सरणी @_ में रखा जाता है। $_[0]

क्यों एक दूसरों की तुलना में: एक बाहर my $foo = shift या सीधे सरणी काम my ($foo,$bar)[email protected]_; यह सरणी से सीधे मूल्यों का उपयोग करने के लिए भी संभव है द्वारा स्थानांतरण मूल्यों से इस सरणी उपभोग कर सकते हैं? डायरेक्ट सरणी असाइनमेंट सबसे मानक और सामान्य है। कभी-कभी शिफ्ट मार्ग का उपयोग तब किया जाता है जब वैकल्पिक पीछे वाले मान होते हैं। कुछ छोटे निकस को छोड़कर डायरेक्ट सरणी उपयोग को हतोत्साहित किया जाता है: रैपर फ़ंक्शंस जो अन्य कार्यों को कॉल कर रहे हैं, खासकर ऑब्जेक्ट्स के अंदर। फ़ंक्शन जो अन्य कार्यों को लपेटते हैं और इनपुट को संशोधित करते हैं। goto &func का विशेष रूप भी जो वर्तमान कॉल स्टैक को तुरंत छोड़ देता है और @_ के वर्तमान मूल्य पर func को कॉल करता है।

# use shift for optional trailing values 
use v5.10; 
my $foo = shift; 
my $bar = shift // 'default bar value'; 
my $baz = shift // 'default baz value'; 

#obj method to call related non-object function. 
sub bar { my $self = shift; _bar(@_) } 
sub longname { shortname(@_) } 
sub get { return $_[0]->$_[1]; } 
4

# 1 और # 3 associating an object with a class (ऑब्जेक्ट ओरिएंटेड पर्ल) के उदाहरण हैं।

# 2, @_ में फ़ंक्शन को पारित पैरामीटर की सूची है, इसलिए $self और $lab1 पहले 2 पास पैरामीटर के मान प्राप्त करें।

# 4, shift() में पर्ल सबराउटिन में बनाया गया है जो एक तर्क के रूप में एक सरणी लेता है, फिर उस सरणी में पहले आइटम को लौटाता है और हटा देता है। यदि इसमें कोई तर्क नहीं है, तो इसे @_ पर निष्पादित किया गया है। तो $self पहले पास पैरामीटर का मान प्राप्त करता है।

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