#!/usr/bin/perl

sub rabin_karp_sum_with_bigint {
    my ( $S ) = @_; # The string.

    use Math::BigInt;

    my $n = 1;
    my $KRsum = Math::BigInt->new(   "0" );
    my $Sigma = Math::BigInt->new( "256" );
    my $digit;
    my $c;

    foreach $c ( unpack("C*", $S ) ) {
        $KRsum = $KRsum * $Sigma + $c;  # Horner's rule.
    }

    return $KRsum; # The sum.
}

print rabin_karp_sum_with_bigint( "ABCDE" ), "\n";
