Convert-Ascii85
view release on metacpan or search on metacpan
lib/Convert/Ascii85.pm view on Meta::CPAN
$out .= 'y';
next;
}
my $tmp = '';
for my $i (reverse 0 .. 4) {
my $mod = $n % 85;
$n = int($n / 85);
vec($tmp, $i, 8) = $mod + 33;
}
$out .= $tmp;
}
$padding or return $out;
$out =~ s/z\z/!!!!!/;
substr $out, 0, length($out) - $padding
}
*ascii85_encode = \&encode;
sub decode {
my ($in) = @_;
for ($in) {
tr[ \t\r\n\f][]d;
s/z/!!!!!/g;
s/y/+<VdL/g;
}
my $padding = -length($in) % 5;
$in .= 'u' x $padding;
my $out = '';
for my $n (unpack '(a5)*', $in) {
my $tmp = 0;
for my $i (unpack 'C*', $n) {
$tmp *= 85;
$tmp += $i - 33;
}
$out .= pack 'N', $tmp;
}
substr $out, 0, length($out) - $padding
}
*ascii85_decode = \&decode;
1
__END__
=head1 NAME
Convert::Ascii85 - Encoding and decoding of ascii85/base85 strings
=head1 SYNOPSIS
use Convert::Ascii85;
my $encoded = Convert::Ascii85::encode($data);
my $decoded = Convert::Ascii85::decode($encoded);
use Convert::Ascii85 qw(ascii85_encode ascii85_decode);
my $encoded = ascii85_encode($data);
my $decoded = ascii85_decode($encoded);
=head1 DESCRIPTION
This module implements the I<Ascii85> (also known as I<Base85>) algorithm for
encoding binary data as text. This is done by interpreting each group of four
bytes as a 32-bit integer, which is then converted to a five-digit base-85
representation using the digits from ASCII 33 (C<!>) to 117 (C<u>).
This is similar to L<MIME::Base64> but more space efficient: The overhead is
only 1/4 of the original data (as opposed to 1/3 for Base64).
=head1 FUNCTIONS
=over 4
=item Convert::Ascii85::encode DATA
=item Convert::Ascii85::encode DATA, OPTIONS
Converts the bytes in DATA to Ascii85 and returns the resulting text string.
OPTIONS is a hash reference in which the following keys may be set:
=over
=item compress_zero => 0
By default, four-byte chunks of null bytes (C<"\0\0\0\0">) are converted to
C<'z'> instead of C<'!!!!!'>. This can be avoided by passing a false value for
C<compress_zero> in OPTIONS.
=item compress_space => 1
By default, four-byte chunks of spaces (C<' '>) are converted to C<'+<VdL'>.
If you pass a true value for C<compress_space> in OPTIONS, they will be
converted to C<'y'> instead.
=back
This function may be exported as C<ascii85_encode> into the caller's namespace.
=item Convert::Ascii85::decode TEXT
Converts the Ascii85-encoded TEXT back to bytes and returns the resulting byte
string. Spaces and linebreaks in TEXT are ignored.
This function may be exported as C<ascii85_decode> into the caller's namespace.
=back
=head1 SEE ALSO
L<http://en.wikipedia.org/wiki/Ascii85>,
L<MIME::Base64>
=head1 AUTHOR
Lukas Mai, C<< <l.mai at web.de> >>
=head1 BUGS
( run in 1.447 second using v1.01-cache-2.11-cpan-7fcb06a456a )