我正在使用服务将图片发送到服务器,他们要求在发送之前将图像转换为base64格式.我用这段代码尝试了MIME :: Base64:
use MIME::Base64 ();
open (IMAGE, "C:\\wamp\\www\\image.png") or die "$!";
$base64_string = IMAGE;
$encoded = encode_base64($base64_string);
print "Encode $encoded";
Run Code Online (Sandbox Code Playgroud)
并收到此错误消息
Undefined subroutine &mqin::encode_base64 called at line 6.
Dav*_*idO 13
指定空导入列表时,如下所示:
use MIME::Base64 ();
Run Code Online (Sandbox Code Playgroud)
你没有进口.
将该行更改为:
use MIME::Base64;
Run Code Online (Sandbox Code Playgroud)
在encode_base64括号被指定MIME :: Base64的出口没有你的命名空间.默认行为(没有parens)是导出()和encode_base64.你正在覆盖方便的默认值.如果您真的不希望这些函数污染您的decode_base64命名空间,您可以保留原始main行,然后完全限定您的子例程调用:
$encoded = MIME::Base64::encode_base64($base64_string);
Run Code Online (Sandbox Code Playgroud)
但它更容易,并且可能只需通过从use MIME::Base64 ()行中删除括号来处理默认导出列表.
更新您还没有阅读该文件.这一行:
use MIME::Base64 ('encode_base64');
Run Code Online (Sandbox Code Playgroud)
......应该像这样更新:
$base64_string = IMAGE;
Run Code Online (Sandbox Code Playgroud)
如果你use有效的话,那个问题会更加冗长.问题是" encode_base64"本身只是一个单词,而Perl认为这是一个子程序调用.尖括号" decode_base64"是从文件句柄中读取的常用方法." use strict 'subs'"部分只是确保你啜饮整个文件的一种方法,而不仅仅是直到看起来像Perl的"\n"的第一个序列.
Update2:正如MOB指出的那样,您需要转义路径中的反斜杠,或者使用正斜杠.即使在Win32上,Perl并不介意.当然,因为你正在做使用的明智之举IMAGE对你<>,你已经发现了这个错误.