जब भी आप किसी नए चर में संदर्भ की प्रतिलिपि बनाते हैं, तो संदर्भ गणना बढ़ जाती है। कमजोर या मजबूत संदर्भ की प्रतिलिपि करते समय यह सच है।
my $obj = {}; # 1 reference to {} stored in $obj
my $copy = $obj; # 2 references
weaken $obj; # 1 reference
इस बिंदु पर
, $copy
क्षेत्र से बाहर जाता है, संदर्भ गिनती शून्य करने के लिए गिर जाएगी, और स्मृति मुक्त हो जाएगा। अब निम्नलिखित कोड मान:
my $newref = $obj; # 2 references
undef $copy; # 1 reference
पर्ल $newref
में कमजोर संदर्भ संरक्षित है, तो हैश अप्रत्याशित रूप से dealocated किया जाएगा जब $copy
मुक्त कर दिया गया। यह उम्मीद को तोड़ देगा कि जब आप एक संदर्भ की प्रतिलिपि बनाते हैं, तो कम से कम प्रतिलिपि के रूप में यह कम से कम टिकेगा।
संक्षेप में, यदि कमजोर संदर्भ एक असाइनमेंट में बने रहे, तो यह आपको असुरक्षित कमजोरियों के चेक के साथ अपने कोड को कूड़ा करने के लिए मजबूर करेगा, और एक परिवर्तनीय परिवर्तनीय आत्मविश्वास के मुद्दों से बचने के लिए सभी को एक चर को अपनाने के लिए कुछ अन्य तरीकों की आवश्यकता होगी।
स्रोत
2010-12-16 21:24:06
.. क्या आप वाकई एक सबराउटिन कमजोर संदर्भ वापस कर सकते हैं?ऐसा लगता है कि एक subroutine के भीतर बनाया गया कोई भी कमजोर संदर्भ DESTROY-ed होगा जब यह संदर्भ subroutine – Dancrumb
के करीब दायरे से बाहर हो जाता है एक कमजोर संदर्भ परिणाम को एक निहित प्रति में वापस नहीं लौटाएगा (जिसके परिणामस्वरूप एक मजबूत संदर्भ लौटाया जा रहा है)? – Cameron
@ डंक्रंब, @ कैमरॉन, आप एक अधिभारित वस्तु वापस कर सकते हैं जो एक कमजोर संदर्भ संग्रहीत करता है। – ysth