2011-07-12 10 views
5
my $self; { my %hash; $self = bless(\%hash, $pkg); } 

यह HTML/Template.pm से उद्धृत किया गया है, क्यों नहीं bless $self,$pkg? संपादित टिप्पणी का जवाब देने केआप यहां चाल कैसे समझते हैं?

$self = bless({}, $pkg); 

:

my $self ={}; { $self = bless($self, $pkg); } 

या:

आप एक undef आशीर्वाद नहीं कर सकते, क्योंकि लगभग बराबर होगा -

उत्तर

0

क्योंकि $selfundef है आपको त्रुटि Can't bless non-reference value at ... मिल जाएगी। ऐसा इसलिए है क्योंकि केवल कठिन संदर्भों को आशीर्वाद दिया जा सकता है। इस प्रकार पर्ल वस्तुओं की encapsulation लागू करता है। perlobj manpage देखें।

+0

क्या आपका मतलब है 'undef' vars को आशीर्वाद नहीं दिया जा सकता है? – Learning

+0

मेरा मतलब है 'undef' एक हैश रेफ जैसा नहीं है :) –

+0

मैं इसे पहले क्यों आशीर्वाद नहीं दे सकता और इसे बाद में शुरू कर सकता हूं? – Learning

4

मुझे लगता है कि इरादा ब्लॉक को %hash के दायरे को सीमित करना था।

my $self = bless {}, $pkg; 
1
$hash = {}; 
^^^^^  ^^ 
referrer referent 

निम्नलिखित बयान में:: यह के रूप में लिखा जा सकता है

$self = bless($hash, $pkg); 

bless दिग्दर्शन के निशान (अनाम हैश) जो $hash ($pkg की एक वस्तु के रूप में संदर्भित करता है, करने के लिए एचटीएमएल :: टेम्पलेट वर्ग)। यह $hash चर बदलता नहीं है।

bless फ़ंक्शन धन्य अज्ञात हैश का संदर्भ देता है। $self इसलिए धन्य अज्ञात हैश (रेफरेंस) का संदर्भ बन जाता है।

यह याद रखना महत्वपूर्ण है कि अगर bless कार्य करने के लिए पहला तर्क एक संदर्भ है, यह बात यह दर्शाता है जो करने के लिए कि धन्य है, चर नहीं ही है महत्वपूर्ण है:

$self = bless($self, $pkg); 

$self नहीं करता ' टी कुछ भी देखें - यह undef है। आशीर्वाद देने के लिए कोई संदर्भ नहीं है। यह इस प्रयास कर के बराबर है:

$self = bless(undef, $pkg); 

Bless My Referents विषय का एक बेहतरीन परिचय प्रदान करता है।

संबंधित मुद्दे