Digest::Pearson::PurePerl - Pure Perl interface to Pearson hash


Digest-Pearson-PurePerl documentation Contained in the Digest-Pearson-PurePerl distribution.

Index


Code Index:

NAME

Top

Digest::Pearson::PurePerl - Pure Perl interface to Pearson hash

SYNOPSIS

Top

  use Digest::Pearson::PurePerl qw(pearson);

  my $hash = pearson("abcdef012345");  # 0 <= $hash < 256

DESCRIPTION

Top

Digest::Pearson::PurePerl is an implementation of Peter K. Pearson's hash algorithm presented in "Fast Hashing of Variable Length Text Strings" - ACM 1990. This hashing technique yields good distribution of hashed results for variable length input strings on the range 0-255, and thus, it is well suited for data load balancing.

If you prefer a fast implementation, you might want to consider Digest::Pearson instead.

This module does not export anything by default. To use this hash function, do either of the following.

use Digest::Pearson qw(pearson);

Digest::Pearson::pearson($string)

ACKNOWLEDGEMENTS

Top

The implementation is derived from RFC 3074 - DHC Load Balancing Algorithm.

SEE ALSO

Top

Digest::Pearson, Digest::FNV, Digest::DJB.

BUGS

Top

If you find any inaccurate or missing information, please send your comments to tnguyen@cpan.org. Your effort is certainly appreciated!


Digest-Pearson-PurePerl documentation Contained in the Digest-Pearson-PurePerl distribution.

package Digest::Pearson::PurePerl;

use strict;
use Exporter;

@Digest::Pearson::PurePerl::ISA       = qw(Exporter);

@Digest::Pearson::PurePerl::EXPORT_OK = qw(pearson);

@Digest::Pearson::PurePerl::EXPORT    = qw( );

$Digest::Pearson::PurePerl::VERSION   = "1.00";

my @p_tbl = (
  251,175,119,215, 81, 14, 79,191,103, 49,181,143,186,157,  0,232,
   31, 32, 55, 60,152, 58, 17,237,174, 70,160,144,220, 90, 57,223,
   59,  3, 18,140,111,166,203,196,134,243,124, 95,222,179,197, 65,
  180, 48, 36, 15,107, 46,233,130,165, 30,123,161,209, 23, 97, 16,
   40, 91,219, 61,100, 10,210,109,250,127, 22,138, 29,108,244, 67,
  207,  9,178,204, 74, 98,126,249,167,116, 34, 77,193,200,121,  5,
   20,113, 71, 35,128, 13,182, 94, 25,226,227,199, 75, 27, 41,245,
  230,224, 43,225,177, 26,155,150,212,142,218,115,241, 73, 88,105,
   39,114, 62,255,192,201,145,214,168,158,221,148,154,122, 12, 84,
   82,163, 44,139,228,236,205,242,217, 11,187,146,159, 64, 86,239,
  195, 42,106,198,118,112,184,172, 87,  2,173,117,176,229,247,253,
  137,185, 99,164,102,147, 45, 66,231, 52,141,211,194,206,246,238,
   56,110, 78,248, 63,240,189, 93, 92, 51, 53,183, 19,171, 72, 50,
   33,104,101, 69,  8,252, 83,120, 76,135, 85, 54,202,125,188,213,
   96,235,136,208,162,129,190,132,156, 38, 47,  1,  7,254, 24,  4,
  216,131, 89, 21, 28,133, 37,153,149, 80,170, 68,  6,169,234, 151
);



sub pearson
{
    my @message = unpack("C*", shift);
    my $pos     = @message;
    my $hash    = @message & 0xFF;

    while ($pos > 0) {
        $hash = $p_tbl[$hash ^ $message[--$pos]];
    }

    return $hash;
}

1;
__END__