जब आप एक खाली आयात सूची निर्दिष्ट, इस तरह है:
use MIME::Base64();
आप कोई आयात नहीं मिलता है।
बदलें कि करने के लिए लाइन:
use MIME::Base64;
()
कोष्ठक निर्दिष्ट करते हैं कि माइम :: Base64 अपने नाम स्थान के लिए कुछ भी निर्यात करता है। डिफ़ॉल्ट व्यवहार (माता-पिता के बिना) encode_base64
और decode_base64
निर्यात करना है। आप सुविधाजनक डिफ़ॉल्ट ओवरराइड कर रहे हैं। क्या तुम सच में उन कार्यों अपने main
नेमस्पेस को दूषित नहीं करना चाहते हैं आप अपने मूल use MIME::Base64()
लाइन को बनाए रखने सकता है, और फिर अपने सबरूटीन कॉल पूरी तरह से योग्य हैं:
$encoded = MIME::Base64::encode_base64($base64_string);
लेकिन यह सिर्फ अनुमति देने के लिए एक पूरी बहुत आसान है, और शायद करने के लिए संतोषजनक है आपकी use
लाइन से ब्रांड्स को हटाकर संसाधित करने के लिए डिफ़ॉल्ट निर्यात सूची को संसाधित किया जाना चाहिए।
अद्यतन आप फ़ाइल भी नहीं पढ़ रहे हैं। यह पंक्ति:
$base64_string = IMAGE;
... इस तरह अद्यतन किया जाना चाहिए:
$raw_string = do{ local $/ = undef; <IMAGE>; };
$encoded = encode_base64($raw_string);
यही समस्या वरबोस रूप में दर्शा पकड़ा गया होता अगर आप प्रभाव में use strict 'subs'
था। समस्या यह है कि "IMAGE
" स्वयं ही एक शब्द है, और पर्ल सोचता है कि यह एक सबराउटिन कॉल है। कोण ब्रैकेट, "<>
" एक फ़ाइल हैंडल से पढ़ने का सामान्य तरीका है। "local $/ = undef
" भाग यह सुनिश्चित करने का एक माध्यम है कि आप पूरी फ़ाइल को स्लर्प करते हैं, न केवल पहले अनुक्रम तक जो कि "\ n" पर्ल पर दिखता है।
अद्यतन 2: और जैसा कि एमओबी बताता है, आपको या तो अपने पथ में बैकस्लैश से बचने की आवश्यकता है, या आगे की स्लैश का उपयोग करें। पर्ल को Win32 पर भी कोई फर्क नहीं पड़ता। बेशक आप अपने open
पर or die $!
का उपयोग करने का बुद्धिमान कदम उठा रहे हैं, तो आप पहले से ही इस गलती को खोज चुके हैं।
बैकस्लाश के डबल कोट्स के अंदर विशेष अर्थ है। आप या तो सिंगल कोट्स ('' सी: \ वैंप \ www \ image.png'') का उपयोग करना चाहते हैं, बैकस्लैश से अधिक बैकस्लैश से बचें ('" सी: \\ वैंप \\ www \\ image.png "') या बस आगे slashes का उपयोग करें (यह ठीक है, वास्तव में): '" सी: /wamp/www/image.png "'। – mob
विंडोज़ पर माइम :: बेस 64 मॉड्यूल (कम से कम एक्टिवस्टेट पर्ल 5.8.8 के साथ) में समस्या है - और हां, मैंने उस सबराउटिन को 'माइम :: बेस 64 क्यूड (डीकोड_बेसेज 64)' के साथ आयात करने की कोशिश की है। –