मैं mod_perl-Apache-Perl संगतता से संबंधित किसी प्रकार का शोध कर रहा हूं। हाल ही में मैंने पर्ल 5.14.2 का उपयोग करके mod_perl 2.0.4 बनाने की कोशिश की।जीवीजीसी के लिए परिभाषा (0 + जीवीजीपी (जीवी) -> gp_cv) परिभाषा का उपयोग कर पर्ल 5.14 क्यों है?
modperl_perl.c: In function ‘modperl_perl_core_global_init’:
modperl_perl.c:58:9: error: lvalue required as left operand of assignment
इस जगह में निम्नलिखित कोड लिखा है:: संकलन चरण एक त्रुटि के साथ समय से पहले ही समाप्त कर दिया गया
GvCV(gv) = get_cv(cglobals->sub_name, TRUE);
क्या इस त्रुटि उत्पन्न कर सकता है के लिए खोज, मैं के पिछले संस्करणों के बीच एक अंतर पाया है पर्ल और पर्ल 5.14 (कोर/gv.h):
#define GvCV(gv) (GvGP(gv)->gp_cv) /* previous versions */
बनाम
#define GvCV(gv) (0+GvGP(gv)->gp_cv) /* in Perl 5.14 */
इस 0+
परिभाषा से निकाला जा रहा है की अनुमति देता है मोड-पर्ल 2.0.4 सफलतापूर्वक संकलित की है, और इस ठीक क्योंकि 0+...
एक lvalue पिछले संस्करणों की तुलना में मान्यता प्राप्त नहीं है है।
0+
क्यों जीवीसीवी की परिभाषा में उपयोग किया जाता है और क्या यह आवश्यक है? या इसे हटाने के लिए सुरक्षित है और GvCV(gv)
की परिभाषा पर्ल के पिछले संस्करणों की तरह है?
+1 अच्छी तरह से छानबीन सवाल। – pilcrow