मैं एक त्वरित उदाहरण जोड़ूंगा।
$var = "Global";
sub inner {
print "inner: $var\n";
}
sub changelocal {
my $var = "Local";
print "changelocal: $var\n";
&inner
}
sub changedynamic {
local $var = "Dynamic";
print "changedynamic: $var\n";
&inner
}
&inner
&changelocal
&changedynamic
यह निम्नलिखित आउटपुट (टिप्पणियां जोड़ा गया) देता है।
inner: Global # Finds the global variable.
changedynamic: DynamiC# Dynamic variable overrides global.
inner: DynamiC# Find dynamic variable now.
changelocal: Local # Local variable overrides global.
inner: Global # The local variable is not in scope so global is found.
आप एक गतिशील चर के बारे में सोच सकते हैं जो आपके द्वारा कॉल किए जाने वाले कार्यों के लिए वैश्विक रूप से मुखौटा करने के तरीके के रूप में सोच सकता है। जहां लेक्सिकल स्कॉप्ड वैरिएबल केवल निकटतम ब्रेसिज़ के अंदर कोड से दिखाई दे सकते हैं।
स्रोत
2014-05-03 14:51:41
आपको बहुत धन्यवाद – Anil
"मेरा ($ x) एक नया चर बनाता है जो केवल वर्तमान सबराउटिन में दिखाई देता है"। वह सत्य नहीं है। 'मेरा' एक नया चर बनाता है जो केवल वर्तमान * कोड * ब्लॉक में दिखाई देता है। एक subroutine एक ब्लॉक का केवल एक उदाहरण है। आप 'स्थानीय' की अपनी परिभाषा में एक समान त्रुटि करते हैं। –
@ ओ.डी. http://perldoc.perl.org/perlsyn.html#Basic-BLOCKs – TLP