Module version descriptor
Version objects identify version of software components (and potentially other entities). Raku uses them internally for versioning modules.
A version consists of several parts, which are visually represented by joining them with a dot. A version part is usually an integer, a string like alpha
, or a Whatever-star *
. The latter is used to indicate that any version part is acceptable in another version that is compared to the current one.
say v1.0.1 ~~ v1.*; # OUTPUT: «True»say v1.0.1 ~~ v1.*.1; # OUTPUT: «True»
The first part of version literals contains v
and a number; this might be followed by alphanumeric and Whatever parts and trailed by +
. Multiple parts are separate with a dot .
. A trailing +
indicates that higher versions are OK in comparisons:
say v1.2 ~~ v1.0; # OUTPUT: «False»say v1.2 ~~ v1.0+; # OUTPUT: «True»say v0.and.anything.else ~~ v0+; # OUTPUT: «True»
In comparisons, order matters, and every part is compared in turn.
say v1.2 cmp v2.1; # OUTPUT: «Less»
The +
suffix is always taken into account in comparisons:
say v1.0.1+ <=> v1.0.1; # OUTPUT: «More»
And *
(Whatever
) is too, and considered always Less
than whatever digit is in the corresponding part, even if *
is trailed by +
:
say v1.* <=> v1.0; # OUTPUT: «Less»say v1.* <= v1.0; # OUTPUT: «True»say v1.*+ <= v1.0; # OUTPUT: «True»
Please note that method calls, including pseudo methods like WHAT
, require version literals either to be enclosed with parentheses or use some other method to separate them from the dot that denotes a method call, like in these examples:
say (v0.and.some.*.stuff).parts; # OUTPUT: «(0 and some * stuff)»say v0.and.some.*.stuff .parts; # OUTPUT: «(0 and some * stuff)»
method new(Str )
Creates a Version
from a string $s
. The string is combed for the numeric, alphabetic, and wildcard components of the version object. Any characters other than alphanumerics and asterisks are assumed to be equivalent to a dot. A dot is also assumed between any adjacent numeric and alphabetic characters.
method parts(Version: --> List)
Returns the list of parts that make up this Version
object
my = v1.0.1;my = v1.0.1+;say .parts; # OUTPUT: «(1 0 1)»say .parts; # OUTPUT: «(1 0 1)»
The +
suffix is not considered a part of the Version
object, and thus not returned by this method, as shown above in the $v2
variable.
method plus(Version: --> Bool)
Returns True
if comparisons against this version allow larger versions too.
my = v1.0.1;my = v1.0.1+;say .plus; # OUTPUT: «False»say .plus; # OUTPUT: «True»
method Str(Version: --> Str)
Returns a string representation of the invocant.
my = v1.0.1;my = Version.new('1.0.1');say .Str; # OUTPUT: «1.0.1»say .Str; # OUTPUT: «1.0.1»
method gist(Version: --> Str)
Returns a string representation of the invocant, just like Str, prepended with a lower-case v
.
my = v1.0.1;my = Version.new('1.0.1');say .gist; # OUTPUT: «v1.0.1»say .gist; # OUTPUT: «v1.0.1»
method Capture()
Throws X::Cannot::Capture
.