Net::Twitter->updateのresをMojo::JSONに通すとidがズレる

TweetのIDはMojo::JSONを通る過程で丸められてしまう事がある、という話。

use feature 'say';
use Net::Twitter;
use Mojo::JSON 'j';

my $nt = Net::Twitter->new( ... );

my $res = $nt->update( scalar localtime );

say $res->{id}; => 362827222706438144
say j( j( $res ) )->{id}; => 3.62827222706438e+17

JSON になったデータを見てみると特に間違ってはいないので、 JSON -> hashref の変換時に丸まるのだと考えられる。従ってこのデータを元にTweetを探すと、思ったように動かない。

解決としては、 id_str を使えば良い。 id_str はその名の通り文字列なので、数値として丸められることはない。

say $res->{id}; => 362827222706438144
say j( j( $res ) )->{id_str}; => 362827222706438144

特に、得た結果を JSON で格納しておくときなどにハマる、かもしれない。というかハマった、という記録。