On my Ubuntu system, it is using sprintf: $ perl -V:d_Gconvert d_Gconvert='gcvt((x),(n),(b))'; #### 1..1 not ok 1 - they are the same # Failed test 'they are the same' # at w.pl line 40. # got: '9.2233720368547758e+18' # expected: '9223372036854775808' # Looks like you failed 1 test of 1. #### sv_setpvf(keysv, "%.19g", SvNV(arg)); is, in effect, converted to: sv_setpvf(keysv, "%.17g", SvNV(arg));