demerphq wrote: >$VERSION= "1.23_01"; I've not seen that form, but
$VERSION = 1.23_01; which of course doesn't put the underscore in the string value. This still delimits the subrevision portion, but without forcing anything else to handle the delimiter. >but this will produce warnings if you assert a required version >number, as the version isn't numeric. I've found a similar problem when attempting to include underscores in dependency version numbers in Makefile.PL. Now I never use underscores in version numbers in any context, because it's the only way to completely eliminate that class of problems. I don't think the underscore is essential; the bare number has all the right semantics, and a module author's numbering convention is generally clear from the Changes file. For my own modules I use three digits for each part of the version number, like the perl core, rather than the usual two for modules. This has the side effect of making the version number structure clearer. "1.023001" isn't difficult to tease apart. >$VERSION= eval $VERSION; Dumb approach. Now you have two different values for $VERSION depending on how much of the code gets executed (read: depending on who's looking). It's a recipe for trouble, as in the case you note with XS. >BUT, if the module is "bog standard" and uses XS this is a recipe for >a fatal error. XS_BOOT_VERSIONCHECK will compare "1.23_01" to "1.2301" >and decide that they are different versions and die. Presumably XS_BOOT_VERSIONCHECK should be stripping out underscores, and trailing zeroes too, to just compare the numerical values. Even if it operates purely on strings, this transformation is not difficult to do implicitly during the comparison. -zefram