2010-07-14 12 views
6

यह वास्तव में सरल लगता है लेकिन यह मुझे मुश्किल लग रहा है क्योंकि मैं पेर्ल के लिए नया हूं .. अब मैं लूप के बारे में बहुत सारे दस्तावेज देख रहा हूं और मैं अभी भी इस से चिपक गया हूं ... मैं एक उप-जिसमें लूप होता है और मैं लूप के बाहर लूप के अंदर से एक वैरिएबल वैल्यू का उपयोग करना चाहता हूं (लूप चलाने के बाद), हालांकि जब मैं चर को मुद्रित करने का प्रयास करता हूं, या इसे सब से बाहर कर देता हूं, यह काम नहीं करता है, केवल जब मैं लूप के भीतर से वैरिएबल प्रिंट करता हूं तो यह काम करता है .. मैं किसी भी सलाह की सराहना करता हूं कि मैं क्या गलत कर रहा हूं।पर्ल, लूप के बाहर जबकि लूप के भीतर से चर का उपयोग कर?

काम नहीं करता ($ परीक्षण मुद्रित नहीं करता है):

sub testthis {  
    $i = 1; 
    while ($i <= 2) {  
     my $test = 'its working' ;  
     $i++ ; 
    } 
    print $test ; 
} 

&testthis ; 

काम करता है, प्रिंट $ परीक्षण:

sub testthis { 
    $i = 1; 
    while ($i <= 2) { 
     my $test = 'its working' ; 
     $i++ ; 
     print $test ; 
    } 
} 

&testthis ; 
+0

'$ i = 1; शायद 'मेरा $ i = 1;' होना चाहिए, जिस तरह से यह अभी है, आप बाह्य दायरे में '$ i'' से बात कर रहे हैं जो त्रुटियों का स्रोत होगा जैसे ही आप अन्य subroutines के अंदर से subroutines बुला शुरू करते हैं। संभावना है कि बाहरी दायरे में '$ i' भी घोषित नहीं किया गया है, इस मामले में आप पैकेज चर से बात कर रहे हैं। यदि आप 'सख्त उपयोग' के तहत चल रहे थे; चेतावनियों का उपयोग करें; 'फिर' सख्त 'प्रगति ने अविकसित चर के बारे में एक त्रुटि फेंक दी होगी। –

उत्तर

9

आप पाश अंदर चर परीक्षण की घोषणा, तो यह गुंजाइश है लूप, जैसे ही आप लूप छोड़ते हैं वैरिएबल अब घोषित नहीं किया जाता है।
my $test;$i=1 और while(..) के बीच जोड़ें और यह काम करेगा। गुंजाइश केवल लूप

+2

आह ठीक है, मुझे अब मिल गया है .. धन्यवाद ... मैं जिस ट्यूटोरियल को देख रहा हूं, वह भी इसका उल्लेख करने के लिए बहुत ही बुनियादी है, मुझे लगता है कि मुझे सीधे – Rick

5

जगह लूप से पहले my $test जगह के बजाय पूरे उप होगी। ध्यान दें कि इसमें केवल अंतिम मान होगा जो कि लूप में असाइन किया गया है। क्या आप इसके बाद क्या कर रहे हैं?

// will print "it's working" when 'the loop is hit at least once, 
// otherwise it'll print "it's not working" 
sub testthis { 
    $i = 1; 
    my $test = "it's not working"; 

    while ($i <= 2) { 
     $test = "it's working"; 
     $i++ ; 
    } 
    print $test ; 
} 
3

आप इस एक कोशिश कर सकते हैं:

sub testthis { 
my $test 
$i = 1; 
while ($i <= 2) { 

$test = 'its working' ; 

$i++ ; 

print $test ; 
} 

} 

& testthis;

नोट: जब भी पेर्ल कोड लिखते हैं, तो कोड की शुरुआत में use strict; और use warning जोड़ने के लिए बेहतर होता है।

+1

+1 पर उल्लेख करने के लिए पर्ल मैन पेज पर जाना चाहिए 'सख्त उपयोग करें'। – Abel

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