में perl foreach loop मुझे संदर्भ द्वारा perl pass arg में subroutine पता है। लेकिन नीचे दिए गए कोड में, सबराउटिन में फ़ोरैच लूप @list
के मान को नहीं बदलना चाहिए क्योंकि my $i
को नया लेक्सिकली स्कोप var $i
बनाना चाहिए। $i
पर कोई भी असाइनमेंट लेक्सिक रूप से गुंजाइश होना चाहिए लेकिन @list
मान को नहीं बदलना चाहिए।subloutine
कोई भी बता सकता है कि फ़ोरैच लूप के अंदर क्या हो रहा है जिससे मान @list
पर बदल जाता है?
sub absList {
foreach my $i (@_) {
$i = abs($i);
}
}
@list = (-2,2,4,-4);
absList(@list);
print "@list";
आउटपुट:
2 2 4 4
जानकारी के लिंक के लिए धन्यवाद। तो इसका मतलब है कि फोरैच में '$ i' हमेशा @arr के संदर्भ में/उल्लिखित किया जाएगा, भले ही मैं इसे 'my' के साथ/बिना उपयोग कर रहा हूं। और यदि '@ arr' विशेष चर '_ _' है, तो इसका अर्थ है कि' $ i'' _ _' में तत्वों का वास्तविक मान होगा। 'I i' के किसी भी मान को असाइन करने का अर्थ है' $ @ 'में तत्वों का मान बदलना। क्या मैं सही हू? – user2763829
@ user2763829 हां, 'मेरा' पुनरावृत्ति चर के लिए केवल दायरे को परिभाषित करता है। –
धन्यवाद। 'Fore'' में 'my' के बिना भी,' $ i' हमेशा 'foreach' लूप के भीतर scoped जाएगा क्योंकि 'i i' स्थानीय रूप से दायरा होगा। तो क्या वास्तव में 'my' से' i i '(इस परिदृश्य या किसी अन्य परिदृश्य में) घोषित करने की आवश्यकता है? – user2763829