|
カテゴリ:プログラミング
Perlのお話。
入力値が馬鹿でかい整数値なので use bigint;を使用していたのだけれど 日付の計算にDateTimeモジュールを使用していた。 そうすると $dt = DateTime->now(time_zone => 'local');でエラーが出る。 monthsにaddする1がBigint型だとか抜かしやがる。 add命令使えないのかなぁとか思って $year = $dt->year;ってするとmonthに代入する値がBigint型だと抜かしやがる (year, dayは問題なし) どうもuse bigint;すると1などのリテラルがbigint型と解釈されるので 四則演算の結果もbigint型と解釈されるっぽい。 どうすればいいんじゃーヽ(`Д´)ノと暴れること4時間ほど。 以下のようにすると上手くいった。 $dt = DateTime->now(time_zone => 'local'); お気に入りの記事を「いいね!」で応援しよう
[プログラミング] カテゴリの最新記事
DateTimeが絡むところだけ{}で囲って no bigint; しておけばええんちゃう?
(2014.08.14 09:41:59)
それがですねぇ。
何故かno bigint;してもエラーが出るんですよ…… 以下で試したんだけどね。 no bigint; $dt = DateTime->now(time_zone => 'local'); $dt->add(months => 1); #ところで "no"ってスコープ内でだけ有効なの? (2014.08.15 16:48:12)
亀レスですが、
use/noは(モジュールがまともに実装されてれば)スコープ内でのみ有効です。 perldoc bigintにもno bigintを使う例がありました。 ためしにこちらでもやってみましたが、no bigintしたスコープ内では普通にDateTime::addが動きました。(v5.10.1 @CentOS6) (2014.08.22 14:13:17) |