Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Any reason NV is not marked as POK when accessed as string?

by demerphq (Chancellor)
on Mar 23, 2017 at 19:12 UTC ( #1185666=note: print w/replies, xml ) Need Help??


in reply to Re: Any reason NV is not marked as POK when accessed as string?
in thread Any reason NV is not marked as POK when accessed as string?

What you say makes sense, but makes me wonder why we upgrade NV's to PVNV's, and makes me think maybe we used to trust the cached value... Which makes me wonder if we couldn't change the logic so that when we stringify NV's or PVNV's we check the locale, and /then/ decide to upgrade/trust the cached value. IOW, why are paying a price for a locale switch when there is a decent chance most operations will be under a common locale? Is it expensive to check locale? (I will do some archive digging to see if these answers are in my mailbox, but I thought i would ask anyway).

---
$world=~s/war/peace/g

  • Comment on Re^2: Any reason NV is not marked as POK when accessed as string?

Replies are listed 'Best First'.
Re^3: Any reason NV is not marked as POK when accessed as string?
by syphilis (Bishop) on Mar 23, 2017 at 23:16 UTC
    ... makes me think maybe we used to trust the cached value

    I think https://www.nntp.perl.org/group/perl.perl5.porters/2016/10/msg240576.html and responses is relevant here.
    As also mentioned there, the stringification of the NV is retained if the NV is an inf or nan.
    I assumed this was ok because stringifications of inf and nan were not affected by locale. (But I notice that stringification of 0.0 to "0" is not retained.)

    Cheers,
    Rob

      It is not very consistent. Consider:

      $ perl -MDevel::Peek -e'$x="1e1"; 0+$x; Dump($x)' SV = PVNV(0xc27550) at 0xc48bc8 REFCNT = 1 FLAGS = (IOK,NOK,POK,pIOK,pNOK,pPOK) IV = 10 NV = 10 PV = 0xc37d80 "1e1"\0 CUR = 3 LEN = 16 $perl -MDevel::Peek -e'$x="1.1e1"; 0+$x; Dump($x)' SV = PVNV(0x1513550) at 0x1534bc8 REFCNT = 1 FLAGS = (IOK,NOK,POK,pIOK,pNOK,pPOK) IV = 11 NV = 11 PV = 0x1523d80 "1.1e1"\0 CUR = 5 LEN = 16

      Something smells here. I think that patch needs to be reviewed and supplanted.

      ---
      $world=~s/war/peace/g

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1185666]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (3)
As of 2020-09-25 10:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    If at first I donít succeed, I Ö










    Results (137 votes). Check out past polls.

    Notices?