Обнаружил, что нижеследующий код корректно исполняется в perl 5.8.5, но некорректно исполняется в perl 5.8.0:
sub StrToNum {
my ($Str, $Check, $Magic) = @_;
my $len = length($Str);
for (my $i = 0; $i < $len; $i++) {
$Check *= $Magic;
$Check &= 0xFFFFFFFF;
$Check += ord(substr($Str, $i, 1));
}
return $Check;
}
Решение для perl 5.8.0:
sub StrToNum {
my ($Str, $pCheck, $pMagic) = @_;
my $len = length($Str);
$Check = Math::BigInt->new($pCheck);
$Magic = Math::BigInt->new($pMagic);
for (my $i = 0; $i < $len; $i++) {
$Check *= $Magic;
$Check &= 0xFFFFFFFF;
$Check += ord(substr($Str, $i, 1));
}
return $Check;
}