क्या था डिजाइन (या तकनीकी) पर्ल स्वचालित रूप से निम्न सिंटैक्स साथ $_
स्थानीयकृत नहीं करने के लिए कारण:पर्ल में, `जबकि (<HANDLE>) {...}` `_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
while (<HANDLE>) {...}
के रूप में लिखा जाता है कौन सा:
while (defined($_ = <HANDLE>)) {...}
अन्य निर्माणों कि परोक्ष को लिखने के सब $_
ऐसा स्थानीय तरीके से करें (for/foreach
, map
, grep
), लेकिन while
के साथ, आपको स्पष्ट रूप से चर को स्थानीयकृत करना होगा:
local $_;
while (<HANDLE>) {...}
मेरा अनुमान है कि कमांड लाइन स्विच के साथ "सुपर-एडब्ल्यूके" मोड में पर्ल का उपयोग करने के साथ इसका कुछ संबंध है, लेकिन यह गलत हो सकता है।
तो अगर कोई जानता है (या भाषा डिजाइन चर्चा में अभी तक बेहतर था), तो क्या आप हमारे साथ इस व्यवहार के पीछे तर्क साझा कर सकते हैं? अधिक विशेष रूप से, बग के बाहर $_
के मूल्य को रोकने के लिए क्यों अनुमति दी जा रही थी, बग के कारण यह महत्वपूर्ण हो सकता है (जो मुझे एसओ और अन्य पर्ल कोड में सभी जगहों पर देखता है)?
मामले में यह ऊपर से स्पष्ट नहीं है, कारण है कि $_
while
साथ स्थानीय जाना चाहिए कि इस उदाहरण में दिखाया गया है:
sub read_handle {
while (<HANDLE>) { ... }
}
for (1 .. 10) {
print "$_: \n"; # works, prints a number from 1 .. 10
read_handle;
print "done with $_\n"; # does not work, prints the last line read from
# HANDLE or undef if the file was finished
}
यही कारण है कि मैं (लगभग) कभी भी $ _ पर भरोसा नहीं करता हूं। –
यही कारण है कि मैं कभी भी पर्ल का उपयोग नहीं करता हूं। – kurumi
मुझे लगता है कि आपका मतलब है * {स्थानीय $ _; जबकि () {...}} * –
MkV