in reply to Re: Re^4: Confirming what we already knew (it's cached)
in thread Confirming what we already knew

When you modify the numeric value (NV) of a scalar, the NOK flag is set and the other flags (IOK, POK) are cleared: that means if we need the NV, we can just grab it (since NOK is true), but if we need the string value (PV, for 'pointer') we need to do a conversion.

When the conversion is done, we also need to distinguish whether the conversion was lossy or not: for example if we use a numeric 1.2 in an integer context, we cache the integer value 1 and set pIOK ('private' integer OK) to avoid the need to recalculate the integer next time we need it, but if it were 1.0 we'd also set IOK.

The Devel::Peek module is very useful for seeing this sort of thing:

perl -MDevel::Peek -we '$a=1.2;Dump($a);$b="$a";Dump($a)'

Hugo

Replies are listed 'Best First'.
Re: Re: Re: Re^4: Confirming what we already knew (it's cached)
by BrowserUk (Patriarch) on Mar 05, 2003 at 21:32 UTC

    Agreed. Though it does take a fair amount of reading to understand the output I find. diotalevi put me on to Perl Guts Illustrated, which has been a great help as I always have a pile of scraps of paper next to me with sketches and tables scribbled all over them when I am programming. Despite the fact that I have no aptitude artistically, I seem to have a visually oriented brain.

    However, I'm a little confused by what your example was illustrating?

    C:\test>perl -MDevel::Peek -we "$a=1.2;Dump($a);$b="$a";Dump($a)" Name "main::b" used only once: possible typo at -e line 1. SV = NV(0x1bc58c0) at 0x1bd2a50 REFCNT = 1 FLAGS = (NOK,pNOK) NV = 1.2 SV = NV(0x1bc58c0) at 0x1bd2a50 REFCNT = 1 FLAGS = (NOK,pNOK) NV = 1.2

    Examine what is said, not who speaks.
    1) When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
    2) The only way of discovering the limits of the possible is to venture a little way past them into the impossible
    3) Any sufficiently advanced technology is indistinguishable from magic.
    Arthur C. Clarke.

      If you change the quotes, you need to be careful of the interior; try:

      perl -MDevel::Peek -we "$a=1.2;Dump($a);$b=qq{$a};Dump($a)"

      Hugo

        {blush}...........it normally gives some sort of an error when...{double blush}


        Examine what is said, not who speaks.
        1) When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong.
        2) The only way of discovering the limits of the possible is to venture a little way past them into the impossible
        3) Any sufficiently advanced technology is indistinguishable from magic.
        Arthur C. Clarke.