class Version
class Version { }
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)ā¤Ā»
Methods
method new
method new(Str:D $s)
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
method parts(Version:D: --> List:D)
Returns the list of parts that make up this Version
object
my $v1 = v1.0.1;
my $v2 = v1.0.1+;
say $v1.parts; # OUTPUT: Ā«(1 0 1)ā¤Ā»
say $v2.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
method plus(Version:D: --> Bool:D)
Returns True
if comparisons against this version allow larger versions too.
my $v1 = v1.0.1;
my $v2 = v1.0.1+;
say $v1.plus; # OUTPUT: Ā«Falseā¤Ā»
say $v2.plus; # OUTPUT: Ā«Trueā¤Ā»
method Str
method Str(Version:D: --> Str:D)
Returns a string representation of the invocant.
my $v1 = v1.0.1;
my $v2 = Version.new('1.0.1');
say $v1.Str; # OUTPUT: Ā«1.0.1ā¤Ā»
say $v2.Str; # OUTPUT: Ā«1.0.1ā¤Ā»
method gist
method gist(Version:D: --> Str:D)
Returns a string representation of the invocant, just like
Str, prepended with a lower-case v
.
my $v1 = v1.0.1;
my $v2 = Version.new('1.0.1');
say $v1.gist; # OUTPUT: Ā«v1.0.1ā¤Ā»
say $v2.gist; # OUTPUT: Ā«v1.0.1ā¤Ā»
method Capture
method Capture()
Throws X::Cannot::Capture.