demerphq wrote:
Remember the old Perl maxim of "be tolerant of what you expect and
strict with what you emit".

Are there technical reasons why this should be disallowed?

Internally, version objects are stored as an array of integers for comparison purposes. Normally, that array is split on periods (decimal points) or groupings of three digits (for decimal versions). When an underbar/underscore is encountered, that is used as an additional split character and the is_alpha flag set, so that the last "digit" of the version is the "alpha release". The original string representation is stored as well (and is used for stringified output); the internal representation is only used for comparison purposes.

I don't have any way of encoding which separators were used between "digits", so the code assumes that if is_alpha is set, then the last (and only the last) separator was an underbar; any others are assumed to be periods (decimal points). If we were to allow an arbitrary string containing one-or-more periods and/or one-or-more underscores, not only would the internal representation need to accommodate that, but the comparison scheme would similarly need to be augmented. As it stands now:

        1.002 < "1.002_01" < 1.002_01 == 1.00201

(i.e. the unquoted underscore gets eaten by tokenizer). In other words, an alpha release is larger than the next smaller non-alpha release and yet less than a non-alpha release with the same "digits". Thus the alpha release exists in between the cracks of two adjacent non-alpha releases.

John

Reply via email to