nDiki
2003年12月23日 (火)
■ Time::Local::gmtime の範囲チェック

Perl v5.8.x だと、Time::Local::gmtime できちんと範囲チェックが動作している(範囲外だと croak される)のだが、Perl 5.005_03 では必ずしもそうではないようだ。 WiKicker のデバッグ中に発見。
でソースを読んでみると、古い Time::Local では cheat サブルーチンで
- 範囲チェック
- 指定した年月の開始 gmtime を計算し、%cheat にキャッシュ
している。同一年月での2度目以降 timegm 呼び出しでは %cheat キャッシュを使用して cheat サブルーチンを呼びにいかないので、範囲チェックが実行されないという塩梅。 つまり 2003年1月1日… で一度 timegm を呼び出すと2003年1月に関しては以降 cheat サブルーチンは呼ばれないため、次に 2003年1月33日…で読んでもエラーにしてくれないというわけ(最初に2003年1月33日…で呼んだ場合はちゃんとエラーになるので逆に厄介)。
Perl v5.8.0 以降に標準ではいっている Time::Local ではきちんと毎回チェックする。 うるう年・大の月/小の月も考慮してチェックされる(v5.8.0 より前のでは 31 より大きいかのチェックのみ)。
- Perl 5.005_03 -> Time::Localバージョン情報なし
- Perl v5.6.0 -> Time::Localバージョン情報なし
- Perl v5.6.1 -> Time::Localバージョン情報なし
- Perl v5.8.0 -> Time::Local VERSION 1.04
であり、CPAN では 5.005_03 でも動作する Time::Local パッケージ (1.05~)が公開されている。
Time::Local 1.04 以降を PREREQ_PM にしてもいいのだが、5.005_03 な利用者にとってはインストールするのも面倒か。 最低限のエラーチェックを自前で用意して、互換になるようにした方がいいかな。
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
- [ WiKicker ] SunOS 5.6 にインストール (2003-04-23)
- Perl v5.8.8 の CGI.pm の PATH_INFO 処理の問... (2006-07-08)
Related term
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.140695s / load averages: 0.22, 0.18, 0.17
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)




twitter.com/Naney の follower になってください。