This module provides functions to encode and decode strings into and from
the base64 encoding specified in RFC 2045 - _MIME (Multipurpose Internet
Mail Extensions)_. The base64 encoding is designed to represent arbitrary
sequences of octets in a form that need not be humanly readable. A
65-character subset ([A-Za-z0-9+/=]) of US-ASCII is used, enabling 6 bits
to be represented per printable character.
The following primary functions are provided:
* encode_base64( $bytes )
* encode_base64( $bytes, $eol );
Encode data by calling the encode_base64() function. The first argument
is the byte string to encode. The second argument is the line-ending
sequence to use. It is optional and defaults to "\n". The returned
encoded string is broken into lines of no more than 76 characters each
and it will end with $eol unless it is empty. Pass an empty string as
second argument if you do not want the encoded string to be broken into
The function will croak with "Wide character in subroutine entry" if
$bytes contains characters with code above 255. The base64 encoding is
only defined for single-byte characters. Use the Encode module to select
the byte encoding you want.
* decode_base64( $str )
Decode a base64 string by calling the decode_base64() function. This
function takes a single argument which is the string to decode and
returns the decoded data.
Any character not part of the 65-character base64 subset is silently
ignored. Characters occurring after a '=' padding character are never
If you prefer not to import these routines into your namespace, you can
call them as:
use MIME::Base64 ();
$encoded = MIME::Base64::encode($decoded);
$decoded = MIME::Base64::decode($encoded);
Additional functions not exported by default:
* encode_base64url( $bytes )
* decode_base64url( $str )
Encode and decode according to the base64 scheme for "URL applications"
. This is a variant of the base64 encoding which does not use padding,
does not break the string into multiple lines and use the characters "-"
and "_" instead of "+" and "/" to avoid using reserved URL characters.
* encoded_base64_length( $bytes )
* encoded_base64_length( $bytes, $eol )
Returns the length that the encoded string would have without actually
encoding it. This will return the same value as
'length(encode_base64($bytes))', but should be more efficient.
* decoded_base64_length( $str )
Returns the length that the decoded string would have without actually
decoding it. This will return the same value as
'length(decode_base64($str))', but should be more efficient.