PerlのVersionにおけるNVとかPVとかの取り扱いの違い
こう書けばNVとPV混じったものが出来ると思っている時期がありました。
#!/usr/bin/env perl use strict; use warnings; use Devel::Peek; use JSON::XS qw(encode_json); print "$] \n"; { no warnings 'void'; my $value = ~0 + 1; $value . ''; Devel::Peek::Dump($value); print encode_json({ value => $value }). "\n"; }
5.008008 SV = PVNV(0x7f86e1849fa0) at 0x7f86e182a100 REFCNT = 1 FLAGS = (PADBUSY,PADMY,NOK,POK,pNOK,pPOK) IV = 0 NV = 1.84467440737096e+19 PV = 0x7f86e146a740 "1.84467440737096e+19"\0 CUR = 20 LEN = 40 {"value":"1.84467440737096e+19"}
5.018002 SV = PVNV(0x7f91d38afad0) at 0x7f91d383bab0 REFCNT = 1 FLAGS = (PADMY,NOK,POK,pNOK,pPOK) IV = 0 NV = 1.84467440737096e+19 PV = 0x7f91d340b020 "1.84467440737096e+19"\0 CUR = 20 LEN = 48 {"value":"1.84467440737096e+19"}
5.020000 SV = PVNV(0x7f8c01823ed0) at 0x7f8c0183d1b8 REFCNT = 1 FLAGS = (PADMY,NOK,pNOK) IV = 0 NV = 1.84467440737096e+19 PV = 0x7f8c0140b2b0 "1.84467440737096e+19"\0 CUR = 20 LEN = 48 {"value":1.84467440737096e+19}
5.20だとちゃんとNVだと認識してくれるのねー Bモジュールの機能に依存して実装されてるモジュールのメンテナンスは大変そう。 そして、そういったモジュール(JSON系)を使ってる人も皆意識していかないとですね。