$s = '20 ducks';;
Dump $s;;
SV = PV(0x18aec0) at 0xa5b48
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x40cad18 "20 ducks"\0
CUR = 8
LEN = 16
Length = 16. Now use it in a numeric constant.
$s += 1;;
Argument "20 ducks" isn't numeric in addition (+) at (eval 13) line 1,
+ <STDIN> line 4.
Dump $s;;
SV = PVNV(0x40b1eb8) at 0xa5b48
REFCNT = 1
FLAGS = (NOK,pNOK)
IV = 20
NV = 21
PV = 0x40cad18 "20 ducks"\0
CUR = 8
LEN = 16
Hm. Length still 16, but we gained an IV = 20 and an NV = 21; so we gained 12 or 16 bytes.
Oh, and the PV no longer reflects the value of the scalar, so when you use it in a string context, a conversion has to happen!
print $s;;
21
Dump $s;;
SV = PVNV(0x40b1eb8) at 0xa5b48
REFCNT = 1
FLAGS = (NOK,POK,pNOK,pPOK)
IV = 20
NV = 21
PV = 0x40d3068 "21"\0
CUR = 2
LEN = 40
Which modifies the PV and oops, it grew to 40 bytes in the process.
And I don't care how you try to weasel out of it, the evidence is right there for those that care to look. So don't bother.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|