मुझे पर्ल में "मेरे" कीवर्ड का उपयोग कैसे करना चाहिए?


90

मैं उदाहरण में पर्ल नामों के सामने "मेरे" कीवर्ड को ऑनलाइन देखता हूं, लेकिन मुझे इसका कोई मतलब नहीं है। मैंने मैनुअल पृष्ठों और अन्य साइटों को ऑनलाइन पढ़ने की कोशिश की, लेकिन मुझे समझ में आने में कठिनाई हो रही है कि इसे कैसे उपयोग किया जाता है और मैनुअल के बीच अंतर को देखते हुए।

उदाहरण के लिए, इसका उपयोग इस पोस्ट में सरणी की लंबाई पाने के लिए किया गया है: पर्ल में किसी सरणी का आकार ढूंढें

लेकिन मैनुअल कहता है:

ए मेरे सूचीबद्ध वेरिएबल्स को स्थानीय (लेक्सिकली) एन्क्लोजिंग ब्लॉक, फाइल या इवेल के लिए घोषित करता है। यदि एक से अधिक मूल्य सूचीबद्ध हैं, तो सूची को कोष्ठक में रखा जाना चाहिए।

यह क्या करता है और इसका उपयोग कैसे किया जाता है?


3
"इस पोस्ट में सरणी की लंबाई प्राप्त करने के लिए इसका उपयोग किया जाता है", बिल्कुल नहीं। myकम से कम इसमें कारक नहीं था। यह स्केलर असाइनमेंट ऑपरेटर ( =) है जो स्केलर संदर्भ को लागू करता है @arr
इकेगामी

यदि यह वास्तव में "तुम्हारा" नहीं है, तो आपको इसका उपयोग नहीं करना चाहिए।
आइकैन

जवाबों:


140

myएक चर के दायरे को प्रतिबंधित करता है । एक चर का दायरा वह है जहाँ इसे देखा जा सकता है। एक चर का दायरा कम करना जहाँ चर की आवश्यकता होती है, अच्छी प्रोग्रामिंग का एक मूलभूत पहलू है। यह कोड को अधिक पठनीय और कम त्रुटि वाला बनाता है, और इसके परिणामस्वरूप प्राप्त लाभों का एक समूह होता है।

यदि आप एक चर का उपयोग करने की घोषणा नहीं करते हैं my, तो इसके बजाय एक वैश्विक चर बनाया जाएगा। इससे बचना है। use strict;पर्ल का उपयोग करते हुए, आप चाहते हैं कि आपको वैश्विक चर बनाने से रोका जाए, यही कारण है कि आपको अपने कार्यक्रमों में हमेशा use strict;(और use warnings;) का उपयोग करना चाहिए ।


संबंधित पढ़ना: क्यों उपयोग करें use strict;और use warnings;?


11
अंत में एक उत्तर जो बताता है कि क्यों
ThisSuitIsBlackNot 21

जेएस से यहां आने वाले लोगों के लिए: यह अनिवार्य रूप से varऔर letजावास्क्रिप्ट में पसंद है । 'use strict';जेएस के बिना आप कीवर्ड के बिना नए वैश्विक चर घोषित करेंगे, जो कि प्रथाओं का सबसे अच्छा नहीं माना जाता है।
इलेक्ट्रिक कॉफी

@ इलेक्ट्रिक कॉफी, जेएस की शर्तों में, सवाल यह होगा कि "क्या करता है letऔर क्या करता है और varउनका उपयोग कैसे किया जाना चाहिए?" और हाँ, उत्तर लगभग एक ही होगा। (जेएस के letसंस्करण बहुत कुछ पर्ल के myसंस्करणों की तरह हैं , सिवाय इसके कि let
var पर

मेरा सिर्फ यह मतलब था कि यदि लोग जेएस से पर्ल में आए, तो यह उसी अवधारणा को समझाने का एक आसान तरीका होगा
इलेक्ट्रिक कॉफ़ी

@ElectricCfish 1) एक प्रोग्रामर जो स्कूपिंग को समझता है, उसे भाषाओं को बदलने के बाद उसे फिर से समझाने की आवश्यकता नहीं है। 2) यकीन नहीं है कि आपने वास्तव में स्कूपिंग की व्याख्या की है, संदर्भ में जेएस प्रोग्रामर समझेगा या अन्यथा। शायद आप समझाने की कोशिश कर रहे थे use strict;? लेकिन यह सवाल नहीं था, और use strict;इससे अधिक है। या हो सकता है कि आप संवाद करना चाहते हैं जो कि myvars थोड़े की गुंजाइश को सीमित करता है जैसे letऔर varकरते हैं, लेकिन यह उत्तर का पहला वाक्य है। 3) यदि आप किसी प्रश्न का उत्तर अलग से देना चाहते हैं, तो उसके उत्तर क्या हैं।
ikegami

27

त्वरित सारांश: myएक नया चर बनाता है, localअस्थायी रूप से एक चर के मूल्य में संशोधन करता है

नीचे दिए गए उदाहरण में, $ :: '' वैश्विक 'नामस्थान में $ a का संदर्भ है।

$a = 3.14159;
{
  my $a = 3;
  print "In block, \$a = $a\n";
  print "In block, \$::a = $::a\n";
}
print "Outside block, \$a = $a\n";
print "Outside block, \$::a = $::a\n";

# This outputs
In block, $a = 3
In block, $::a = 3.14159
Outside block, $a = 3.14159
Outside block, $::a = 3.14159

अर्थात्, localअस्थायी रूप से परिवर्तनशील के मूल्य को बदलता है, लेकिन केवल उस दायरे के भीतर ही मौजूद होता है।

स्रोत: http://www.perlmonks.org/?node_id=94007

अपडेट करें

के बीच अंतर के बारे में ourऔर myकृपया देखें

( ThisSuitIsBlackNot को धन्यवाद )।


'उनकी' समझाने की परवाह? मैंने हमेशा उन लोगों को भ्रमित किया है।
rdodev

@rdodev: तुम्हारा क्या मतलब है?
इगोर चुबिन

मैं 'मेरे' और 'उनके' दोनों के साथ पर्ल कोड देखता रहता हूँ और व्यवहार में कभी भी अंतर को नहीं समझ पाता।
१d

@rdodev: क्या आप कृपया मुझे कुछ कोड के साथ लिंक भेज सकते हैं their?
इगोर चुबिन

3
@rdodev मुझे लगता है कि आपका मतलब है our: stackoverflow.com/questions/845060/…
ThisSuitIsBlackNot

4

मेरे माध्यम से निजी चर () के लिए प्राथमिक दस्तावेज है my

आपके द्वारा उल्लेख किए गए सरणी आकार के उदाहरण में, इसका उपयोग सरणी के आकार को खोजने के लिए नहीं किया गया है। यह सरणी का आकार धारण करने के लिए एक नया चर बनाने के लिए उपयोग किया जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.