Wenn Sie einen leeren Importliste angeben, wie folgt aus:
use MIME::Base64();
Sie bekomme keine Importe.
Änderung, die an die Leitung:
use MIME::Base64;
Die ()
Pars angeben, dass MIME :: Base64 nichts zu Ihrem Namensraum exportiert. Das Standardverhalten (ohne die Parens) besteht darin, encode_base64
und decode_base64
zu exportieren. Sie überschreiben die bequeme Standardeinstellung. Wenn Sie wirklich main
Namespace verschmutzen Ihr nicht diese Funktionen wünschen könnten Sie Ihre ursprüngliche use MIME::Base64()
Linie behalten und dann Subroutinen-Aufruf vollständig qualifizieren:
$encoded = MIME::Base64::encode_base64($base64_string);
Aber es ist sehr viel einfacher, und wahrscheinlich zufriedenstellend nur erlauben die Standard-Exportliste, die verarbeitet werden soll, indem die Klammer aus der Zeile use
entfernt wird.
Aktualisieren Sie lesen auch nicht die Datei. Diese Zeile:
$base64_string = IMAGE;
... sollte wie folgt aktualisiert werden:
$raw_string = do{ local $/ = undef; <IMAGE>; };
$encoded = encode_base64($raw_string);
Das Problem mehr verbosely erwischt worden wäre, wenn Sie use strict 'subs'
in auswirkte. Das Problem ist, dass "IMAGE
" an sich nur ein Barwort ist und Perl denkt, dass es ein Unterprogrammaufruf ist. Die spitzen Klammern, "<>
" sind die übliche Art, von einem Dateihandle zu lesen. Der "local $/ = undef
" Teil ist nur ein Mittel, um sicherzustellen, dass Sie die gesamte Datei schlürfen, nicht nur bis zur ersten Sequenz, die wie ein "\ n" für Perl aussieht.
Update2: Und wie MOB darauf hinweist, müssen Sie entweder die umgekehrten Schrägstriche auf Ihrem Weg umgehen oder Schrägstriche verwenden. Perl macht nichts, sogar auf Win32. Natürlich, da Sie den weisen Schritt der Verwendung von or die $!
auf Ihrem open
nehmen, haben Sie diesen Fehler bereits entdeckt.
Backslashes haben eine spezielle Bedeutung in doppelten Anführungszeichen. Sie möchten entweder einfache Anführungszeichen verwenden (''C: \ wamp \ www \ image.png''), die umgekehrten Schrägstriche mit mehr umgekehrten Schrägstrichen umgehen (' "C: \\ wamp \\ www \\ image.png" '), oder benutzen Sie einfach Schrägstriche (es ist OK, wirklich): '" C: /wamp/www/image.png "'. – mob
Es scheint ein Problem mit Mime :: Base64-Modul unter Windows (zumindest mit ActiveState perl 5.8.8) - und ja, ich habe versucht, diese Subroutine mit 'Mime verwenden: Base64 qw (decode_base64)'. –