John M. Dlugosz has asked for the wisdom of the Perl Monks concerning the following question:

If someone familiar with the internals could answer a question:

When UNIVERSAL::VERSION compares a v-string against a number, it converts the v-string to a float using the 3-digit convension.

So, how does it tell the difference between a scalar that holds a v-string from one that's a floating-point number? It's implemented in XS, not in Perl, so it can do funny things. It complains if a value is "not numeric", which is easy by looking at the type of SV without asking for a conversion. but, the v-string is not numeric, either. How does it tell the difference between a quoted string (an error) and a v-string? Doesn't "Hi" look exactly the same as v72.105 ?

—John

  • Comment on Implementation question in perl: Version comparisons.

Replies are listed 'Best First'.
Re: Implementation question in perl: Version comparisons.
by John M. Dlugosz (Monsignor) on Jul 31, 2001 at 07:41 UTC
    Update: $VERSION="Hi" does not give this error! But $VERSION="2.3.4" does.

    So, it appears to be looking for strings that contain string-formatted versions. Hmm, if that's what it's testing for, why not just convert it? I suppose it can still be fooled by v50.46.51.