Day too big – 36536 > 24853 エラー

2020 年から、32bit OS で 古い Perl (5.12 か 5.10 より前ぐらいのバージョン)を使っていると、mknmz 実行時に “Day too big – 36536 > 24853” エラーが発生してインデックスの作成に失敗するそうです。

pl/time.pl の gettimezone を以下のものに置き換えると 期待した動作になることを確認しました。 (linux 32bit, Perl 5.8.8)

 

sub gettimezone {
    my ($t0, $t1);

    {
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
            localtime(1000000);
        $year += 1900;
        $t0 =
timelocal($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
    }
    {
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
            gmtime(1000000);
        $year += 1900;
        $t1 =
timelocal($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
    }

    return $t0 - $t1;
}