DNS-Bananafonana
view release on metacpan or search on metacpan
Bananafonana.pm view on Meta::CPAN
{
my $num = shift;
# Remove markup characters
$num =~ s/[-_\.]//g;
my $answer = new Math::BigInt "0";
my $n;
my $d;
while (length($d = substr($num,0,2)) > 0) {
if (length($d) == 1) {
croak __PACKAGE__ . "::from_bananafonana -- invalid bananafonana string $d";
}
$num = substr($num,2);
$answer = $answer * BAFO_BASE;
$n = index($bananafonana_strings, $d)/2.0;
if ($n < 0.0) {
croak __PACKAGE__ . "::from_bananafonana -- invalid bananafonana string $d";
}
$answer = $answer + $n;
}
return $answer;
}
=pod
=head1 to_bananafonana
=head2 Parameters
A C<DNS::BigInt> object.
Optionally:
A markup character to split the string in more readable parts.
Can be C<->, C<_> or C<.>. Defaults to C<->.
A blocksize that determines the number of consonant-vowel combinations
between each markup character. Defaults to 5.
=head2 Returns
A string of bananafonana strings representing the number.
=cut
sub to_bananafonana
{
my $num = shift;
my $markup = shift || BAFO_MARKUP;
my $blocksize = (shift || BAFO_BLOCKSIZE) + 1;
my @digits;
my $q;
my $r;
my $d;
if (! $markup =~ /[-_\.]/) {
croak __PACKAGE__ . "::to_bananafonana -- invalid markup character ($markup)";
}
if ($blocksize < 0) {
croak __PACKAGE__ . "::to_bananafonana -- invalid blocksize ($blocksize)";
}
if ($num eq "NaN" ) {
croak __PACKAGE__ . "::to_bananafonana -- invalid number ($num)";
}
while ($num > 0) {
$q = $num / BAFO_BASE;
$r = $num % BAFO_BASE;
$d = substr($bananafonana_strings, $r*2, 2);
if ($blocksize > 0 && (($#digits + 1) % $blocksize == 0)) {
unshift @digits, $markup;
}
unshift @digits, $d;
$num = $q;
}
pop @digits;
unshift @digits, 'ba' unless (@digits);
return join('', @digits);
}
=pod
=head1 bananafonana
=head2 Parameters
A string
A string containing the domain name of the record. It will be appended to the
result when a pointer record is asked and removed from the input for hostname
lookups.
Optionally:
A string containing a prefix that needs to be added before the bananafonana
representation of the ip address. Defaults to empty.
A markup character to split the string in more readable parts.
Can be C<->, C<_> or C<.>. Defaults to C<->.
A blocksize that determines the number of consonant-vowel combinations
between each markup character. Defaults to 5.
=head2 Returns
A string containing either the bananafonana representation of the ip address
(presented in 1.2.3.4.in-addr.arpa or a.b...e.f.ip6.arpa notation)
or a string representing the ip address determined from the bonananfonana
encoded hostname (for all domains not ending in in-addr|ip6.arpa).
=cut
sub bananafonana
{
my $name = shift;
my $domain = shift || "";
my $prefix = shift || "";
my $markup = shift || BAFO_MARKUP;
my $blocksize = (shift || BAFO_BLOCKSIZE) + 1;
my $ip;
# Input validation
if (! $markup =~ /[-_\.]/) {
( run in 1.310 second using v1.01-cache-2.11-cpan-5e09290becf )