ひぃ(hixi)の技術雑記ブログ

事実や解決策というよりも自分が思ったことをつらつらと書いていく所存。文章構成とかそういうのあまり気にせずに書きます

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系)を使ってる人も皆意識していかないとですね。