[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

Reply via email to