2010-09-02 21 views
5

मैंने सी पुस्तकालय के लिए एक पर्ल एक्सएस रैपर लिखा है जिसमें लगभग 80 8 फ़ंक्शन शामिल हैं। अभी मेरी सामान्य रणनीतिके साथ सी फ़ंक्शन से त्रुटि को प्रतिस्थापित करना है और कॉलिंग पर्ल कोड को स्पष्ट रूप से जांचना है कि वापसी undef नहीं है। (कुछ सी कार्यों के लिए यह और अधिक जटिल है के रूप में मैं एक HV/AV में अपने उत्पादन में बदलने और त्रुटि रिपोर्ट करने के खाली सूची का उपयोग करें।)पर्ल का एक्सबी कैसे मर सकता है?

अब के रूप में मुझे लगता है कि लाइब्रेरी का उपयोग कर बड़ा पर्ल स्क्रिप्ट लिखने के लिए ले जाया गया है, मैं चाहता हूँ त्रुटि प्रबंधन को सरल बनाएं और उदाहरण का उपयोग करें सामान्य eval {}/die अपवाद की तरह त्रुटियों को संभालने के लिए तंत्र।

पल मेरी XS में एक साधारण XSUB पर कि तरह लग रहे:

SV * 
simple_function(param1, param2 = 0, param3 = 0) 
     int    param1 
     int    param2 
     int    param3 
     CODE: 
       int rc; 
       rc = simple_function(param1, param2, param3); 
       RETVAL = (rc == 0) ? &PL_sv_yes : &PL_sv_undef; 
     OUTPUT: 
       RETVAL 

मैंने देखा है कि कुछ मॉड्यूल die त्रुटियों पर करने के लिए "RaiseError" की तरह वैश्विक ध्वज है, लेकिन किसी भी उदाहरण मैं कर सकते हैं खोजने में असफल रहा से उधार लेना। मेरे पास के कुछ मॉड्यूल .pm के अंदर "RaiseError" ध्वज को संभालते हैं, .xs के अंदर नहीं, और इस प्रकार पर्ल के die का उपयोग करने की अनुमति दी गई है। मेरे मामले में .pm के अंदर लागू करने के लिए कठिन है क्योंकि कई कार्यों को विशेष त्रुटि जांच की आवश्यकता होती है। वह भी कोड डुप्लिकेशंस का कारण बनता है क्योंकि एक्सएस के अंदर चेक पहले से मौजूद हैं।

मुझे perlxs/perlguts दस्तावेज़ में कुछ भी प्रासंगिक नहीं मिला। विशेष रूप से, मैंने अपने .xs से उत्पन्न .c में Perl_croak() पर कॉल देखी हैं, लेकिन फ़ंक्शन के लिए किसी दस्तावेज़ को ढूँढने में विफल रही है।

पर्ल के die का एक्सएस 'एनालॉग क्या है? या XSUB रिपोर्ट पर्ल रन-टाइम को कैसे विफल कर सकती है कि फ़ंक्शन विफल हो गया है और वापसी के लिए कोई रिटेल नहीं है? [email protected] को सही तरीके से कैसे सेट करें?

उत्तर

6

Perl_croak() मैन पेज पर here दस्तावेज किया गया है। जैसा कि उस पृष्ठ पर दिखाया गया उदाहरण दिखाता है, आप या तो इसे एक संदेश स्ट्रिंग पास कर सकते हैं, या आप मैन्युअल रूप से अपवाद ऑब्जेक्ट पर $ @ सेट कर सकते हैं और नल पास कर सकते हैं।

+0

केवल एक प्रश्न। क्यों * मरना * और नहीं * मर रहा है *? या यह एक और लैरी बुद्धि थी? – Dummy00001

+1

नहीं, [ज़ेफ्राम] (http://search.cpan.org/~zefram) है। यह [हैकिश] (http://catb.org/jargon/html/writing-style.html) उपयोग है क्योंकि यह कीवर्ड 'die' से प्राप्त होता है। – daxim

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