Перловка

Обнаружил, что нижеследующий код корректно исполняется в 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;
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *