in reply to Re: Re: Distinguishing a v-string from something else
in thread Distinguishing a v-string from something else

a v-string (which will UTF-8-encode the values above 127)

actually, they're UTF-8 encoded if they're above 255.

> perl -MDevel::Peek -e"$a=v256;$b=v128;Dump$a;Dump$b" SV = PV(0x182ebf4) at 0x182383c REFCNT = 1 FLAGS = (POK,pPOK,UTF8) PV = 0x182013c "\304\200"\0 CUR = 2 LEN = 3 SV = PV(0x182ec24) at 0x1823848 REFCNT = 1 FLAGS = (POK,pPOK) PV = 0x182012c "\200"\0 CUR = 1 LEN = 2

you can differentiate between a number and a v-string by examining the result of the SvPOKp(SV*) macro. a true return means a v-string, false indicates a number.

if you can differentiate between a v-string and any other string by your above method, you should be able to determine whether or not you have a v-string, no?

~Particle *accelerates*

Replies are listed 'Best First'.
Re: Re^3: Distinguishing a v-string from something else
by John M. Dlugosz (Monsignor) on Dec 10, 2002 at 05:58 UTC
    Re: actually, they're UTF-8 encoded if they're above 255.

    I just got around to verifying this. Actually, it does not work the same as chr, in that the v-string encoding faithfully follows the utf8 pragma, while chr decides for itself whether to return a byte or char oriented string regardless of the pragma setting.

    I'm wondering, though, if a number without a v and only 1 dot (normally a floating-point numeric constant) is dual-valued magic when parsed as the indirect object of a use or require? Have to peek at what comes into VERSION.

    if you can differentiate between a v-string and any other string by your above method, you should be able to determine whether or not you have a v-string, no?

    I can easily enough decide if I have a v-string or a string of the form "1.2.3.4" as ASCII, provided it has at least one dot in the latter. That's my purpose: to allow either as the value of $VERSION.

    —John

      i really hope you can get this going. the code on your pad looks like a fantastic start.

      i would suggest that if you do find a way to distinguish a v-string from anything else, you submit a patch to Scalar::Util. an isvstring sub would be very handy.

      ~Particle *accelerates*