Cuando se especifica una lista de importación vacío, así:
use MIME::Base64();
Usted no obtener importaciones
Cambio esa línea para:
use MIME::Base64;
Los ()
parens se especifica que MIME :: Base64 exporta nada para el espacio de nombres. El comportamiento predeterminado (sin los parens) es exportar encode_base64
y decode_base64
. Está anulando el conveniente predeterminado. Si realmente no quiere que esas funciones contaminar su main
espacio de nombres que podría retener su línea original use MIME::Base64()
, y luego totalmente a calibrar la llamada del subprograma:
$encoded = MIME::Base64::encode_base64($base64_string);
Pero es mucho más fácil, y probablemente satisfactorio para simplemente permitir la lista de exportación predeterminada que se procesará eliminando el paréntesis de su línea use
.
Actualización Tampoco está leyendo el archivo. Esta línea:
$base64_string = IMAGE;
... debe actualizarse como esto:
$raw_string = do{ local $/ = undef; <IMAGE>; };
$encoded = encode_base64($raw_string);
Ese problema habría sido capturado con más palabras si tuviera use strict 'subs'
vigente. El problema es que "IMAGE
" es solo una palabra, y Perl cree que es una llamada de subrutina. Los corchetes angulares, "<>
", son la forma más común de leer desde una manejador de archivos. La parte "local $/ = undef
" es solo un medio para asegurarse de que consume todo el archivo, no solo hasta la primera secuencia que se parece a "\ n" a Perl.
Update2: Y como señala MOB, o necesita escapar de las barras diagonales en su camino, o usar barras inclinadas. A Perl no le importa, incluso en Win32. Por supuesto, ya que está dando el sabio paso de usar or die $!
en su open
, ya ha descubierto este error.
Las barras diagonales inversas tienen un significado especial dentro de comillas dobles. Si desea utilizar comillas simples (''C: \ wamp \ www \ image.png''), escape las barras invertidas con más barras invertidas (' "C: \\ wamp \\ www \\ image.png" ', o simplemente use barras diagonales (está bien, realmente): '" C: /wamp/www/image.png "'. – mob
Parece haber un problema con el módulo Mime :: Base64 en Windows (al menos con ActiveState perl 5.8.8) - y sí, he intentado importar esa subrutina con 'use Mime :: Base64 qw (decode_base64)'. –