4年くらい前の話なので今どき起きないだろうな~とは思いつつも備忘のために。
ちなみに古いPerlプログラム(2001年頃の奴がマジでヤバい)を他の言語で作り直したいという話はちょいちょい来る。
32bitのWindows2003で起きて、64bitのWindows2008では起きなかったので、内部で int
に変換してんのかな~、とか思ったり。
my $id = '2234567890';
my $idstr = sprintf('%10d', $id);
# => '2234567890' ではなく負の値になる
sprintf()
がどういう仕組みなのかは知らない。
解決方法はこんな感じ。正直なところ、 sprintf
のところを触らずになんとかできたら一番よかった。
my $idstr = substr('0000000000' . $id, -10);
開発当初はIDが少なかったから起きなかったんだろうね……