2016-11-21 23 views
5

मैं पर्ल पढ़ रहा हूं जो काफी दिलचस्प है। लेकिन पर्ल में goto from here पढ़ने के दौरान मुझे संदेह हुआ।पर्ल में फ़ंक्शन कॉल और गोटो और NAME के ​​बीच क्या अंतर है?

मुझे पता है कि गोटो स्टेटमेंट में तीन प्रकार हैं।

गोटो लेबेल।

goto EXPR।

goto & NAME।

लेकिन इन तीन प्रकारों में, तीसरे एक goto &NAME का उपयोग क्या है? यह फ़ंक्शन कॉल की तरह प्रतीत होता है। फिर,

  1. goto &NAME और सामान्य function call पर्ल में के बीच वास्तविक अंतर क्या है?
  2. जब हम गोटो & NAME का उपयोग करते हैं?

क्या कोई उदाहरण के साथ समझा सकता है।

अग्रिम धन्यवाद।

उत्तर

10

यह goto पेज

goto &NAME रूप में कहते हैं goto के अन्य रूपों से काफी अलग है। वास्तव में, यह सामान्य अर्थ में गोटो नहीं है, और में अन्य गेटोस से जुड़ी कलंक नहीं है।

तो यह वर्तमान सबरूटीन (कोई भी परिवर्तन local() द्वारा निर्धारित खोने) बाहर निकल जाता है और तुरंत नामित सबरूटीन वर्तमान मूल्य का उपयोग कर उसके स्थान पर कहता है,

इसके बजाय अपने प्रश्न का उत्तर इस प्रकार है @_ का।

सामान्य फ़ंक्शन कॉल के साथ फ़ंक्शन से बाहर निकलने के बाद अगली पंक्ति पर निष्पादन जारी रहता है।

कि पैरा के बाकी अच्छी तरह से लायक के साथ-साथ पढ़ने है, और उत्तर देता है आपके दूसरे प्रश्न

यह AUTOLOAD सबरूटीन्स एक और सबरूटीन लोड और फिर नाटक है कि अन्य सबरूटीन में बुलाया गया था करना चाहते हैं कि द्वारा किया जाता है पहली जगह (सिवाय इसके कि वर्तमान सबराउटिन में @_ में कोई भी संशोधन अन्य सबराउटिन के लिए प्रचारित किया जाता है।) goto के बाद, caller भी यह नहीं बता पाएगा कि इस दिनचर्या को पहले कहा जाता था।


एक बुनियादी उदाहरण।एक सबरूटीन deeper कहीं परिभाषित के साथ तुलना

sub func_top { 
    deeper(@_); # pass its own arguments 

    # The rest of the code here runs after deeper() returns 
} 

sub func_top {   
    goto &deeper; # @_ is passed to it, as it is at this point 

    # Control never returns here 
} 

साथ बयान goto &deeper उप func_top से बाहर निकल गया है पर। तो deeper पूरा होने के बाद, नियंत्रण func_top कॉल के बाद वापस आता है। एक अर्थ में, func_top को deeper द्वारा प्रतिस्थापित किया गया है।

goto &func के साथ तर्क पारित करने का प्रयास त्रुटियों में परिणाम, यहां तक ​​कि केवल goto &deeper() के लिए।

+0

क्या आप इसके लिए एक उदाहरण कोड दे सकते हैं? – Ganapathy

+0

@ गानापति मैंने एक मूल उदाहरण जोड़ा - क्या इससे मदद मिलती है? – zdim

+0

आपके उदाहरण के लिए धन्यवाद, मैं आपके उदाहरण से आसानी से समझ गया – Ganapathy

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