Quando si specifica un elenco di importazione vuoto, in questo modo:
use MIME::Base64();
È non ottenere importazioni.
Change che la linea a:
use MIME::Base64;
I ()
parentesi specifica che MIME :: Base64 esporta nulla a che lo spazio dei nomi. Il comportamento predefinito (senza parens) è di esportare encode_base64
e decode_base64
. Stai ignorando il comodo valore predefinito. Se davvero non si vuole quelle funzioni inquinanti tua main
spazio dei nomi si potrebbe conservare la linea originale use MIME::Base64()
, e quindi completamente qualificare la chiamata subroutine:
$encoded = MIME::Base64::encode_base64($base64_string);
Ma è molto più semplice, e probabilmente soddisfacente per solo consentire l'elenco di esportazione predefinito da elaborare rimuovendo la parentesi dalla riga use
.
Aggiornamento Non stai leggendo il file. Questa linea:
$base64_string = IMAGE;
... dovrebbe essere aggiornato in questo modo:
$raw_string = do{ local $/ = undef; <IMAGE>; };
$encoded = encode_base64($raw_string);
Questo problema sarebbe stato catturato più verbosely se si ha use strict 'subs'
in effetti. Il problema è che "IMAGE
" di per sé è solo una bareword, e Perl pensa che sia una chiamata di subroutine. Le parentesi angolari, "<>
" sono il modo comune di leggere da un filehandle. La parte "local $/ = undef
" è solo un modo per assicurare di far scorrere l'intero file, non solo fino alla prima sequenza che assomiglia a "\ n" a Perl.
Update2: E come indica MOB, è necessario che si stia sfuggendo alle barre rovesciate nel percorso o che si utilizzino le barre. Perl non importa, anche su Win32. Naturalmente dal momento che stai prendendo il passo da saggi usando or die $!
sul tuo open
, hai già scoperto questo errore.
Le barre rovesciate hanno un significato speciale all'interno delle virgolette. O vuoi usare le virgolette singole (''C: \ wamp \ www \ image.png''), sfuggire alle barre inverse con più barre retroverse (' "C: \\ wamp \\ www \\ image.png" '), o usa solo le barre (va bene, davvero): '" C: /wamp/www/image.png "'. – mob
Sembra esserci un problema con il modulo Mime :: Base64 su Windows (almeno con ActiveState perl 5.8.8) - e sì, ho provato ad importare quella subroutine con 'use Mime :: Base64 qw (decode_base64)'. –