/usr/share/perl5/Math/Base85.pm is in libmath-base85-perl 0.2+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | package Math::Base85;
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $base85_digits);
use Carp;
use Exporter;
use Math::BigInt qw(:constant);
$VERSION = '0.2';
@ISA = qw(Math::BigInt);
@EXPORT = qw();
@EXPORT_OK = qw(from_base85 to_base85);
=head1 NAME
Math::Base85 - Perl extension for base 85 numbers, as referenced by RFC 1924
=head1 SYNOPSIS
use Math::Base85;
$bigint = from_base85($number);
$b85str = to_base85($bigint);
=head1 DESCRIPTION
RFC 1924 describes a compact, fixed-size representation of IPv6
addresses which uses a base 85 number system. This module handles
some of the uglier details of it.
The base 85 numbers (from 0 to 84) are as follows:
0..9 A..Z a..z ! # $ % & ( ) * + - ; < = > ? @ ^ _ ` { | } ~
At the moment, there's not much in this module. But it should be
sufficient for the purposes of RFC 1924.
This module has a variable called C<$Math::Base85::base85_digits>,
which is a string containing the digits of the base 85 alphabet
from lowest (0) to highest (~), in that order.
Additionally, the following two functions are defined for general
use. (They will be exported upon request.)
=cut
$Math::Base85::base85_digits = join('',
'0' .. '9',
'A' .. 'Z',
'a' .. 'z',
'!', '#', qw/$ % & ( ) * + - ; < = > ? @ ^ _ ` { | } ~/,
);
# Maybe we can make this a little more general...
use constant B85_BASE => 85;
=pod
=head1 from_base85
=head2 Parameters
A string composed of valid base 85 digits.
=head2 Returns
A C<Math::BigInt> object representing the number.
=cut
sub from_base85
{
my $num = shift;
my @digits = split(//, $num);
my $answer = new Math::BigInt "0";
my $n;
my $d;
while (defined($d = shift @digits)) {
$answer = $answer * B85_BASE;
$n = index($base85_digits, $d);
if ($n < 0) {
croak __PACKAGE__ . "::from_base85 -- invalid base 85 digit $d";
}
$answer = $answer + $n;
}
return $answer;
}
=pod
=head1 to_base85
=head2 Parameters
A C<Math::BigInt> object.
=head2 Returns
A string of base 85 digits representing the number.
=cut
sub to_base85
{
my $num = shift;
my @digits;
my $q;
my $r;
my $d;
while ($num > 0) {
$q = $num / B85_BASE;
$r = $num % B85_BASE;
$d = substr($base85_digits, $r, 1);
unshift @digits, $d;
$num = $q;
}
unshift @digits, '0' unless (@digits);
return join('', @digits);
}
=head1 AUTHOR
Tony Monroe <tmonroe+perl@nog.net>
=head1 SEE ALSO
perl(1).
=cut
1;
__END__
|