[0] > my $x = "1.40.564"; $x = $x ~~ m/ ^ <-[.]>+ "." <-[.]>+ /; say ~$x;
1.40
[0] > my $x = "1.40.564"; $x = $x.match(/ ^ <-[.]>+ "." <-[.]>+ /); say ~$x;
1.40
#OR
[1] > my $x = "1.40.564"; $x = S/ "." <-[.]>+ $ // given $x; say $x;
1.40
[1] > my $x = "1.40.564"; $x = $x.subst(/ "." <-[.]>+ $ /, "" ); say $x;
1.40
One issue with your code was failing to create a `<-[.]>` enumerated character
class.
This (negated) `<-[.]>` class consists of all characters other than `.` dot
(i.e. period).
Now read the regexes above:
1. The first two matching expressions look for "start-of-string, non-dot
characters, a dot, then more non-dot characters".
2. The last two substitution expressions look for "a dot, non-dot
characters, then end-of-string".
HTH, Bill.
> On Oct 25, 2025, at 05:19, ToddAndMargo via perl6-users
> <[email protected]> wrote:
>
> Hi All,
>
> What am I doing wrong here:
>
> [2] > my Str $x = "1.40.564"; $x~~s:i/ '.' $$ .* //; print "$x\n";
> 1.40.564
>
> I am after "1.40"
>
> This is my work around, but I'd really like to know
> how to do it right:
>
> my Str $x = "1.40.564"; $x~~m:i/ ( .*? '.') (.*? ) '.' /; print "$0$1\n";
> 1.40
>
> Your in confusion,
> -T